2013-04-12 3 views
2

Ну, как говорит мой вопрос, я имею в виду http://developer.android.com/reference/android/os/AsyncTask.htmlВ чем разница параметра asyntask в android?

Это говорит мне

Asyntask <params, progress, result> 

, но я не использовал прогресс. и согласуется ли это с вашей договоренностью? или у него есть правило?

НАПРИМЕР:

class loadingdata extends AsyncTask<?,?,?> 
    protected void onPreExecute() {} 
    protected String doInBackground(String... args) {} 
    protected void onPostExecute() {} 

так я должен вставить параметр 3 как

asyntask <void String void> ? 

или у него есть правило

<preExecute, postExecute, doInBackground> or so fourth? 

пожалуйста, помогите мне с этим, я новичок в этом, и я не понимаю.

ответ

3

Если вам не нужен один или несколько из AsyncTask параметров используйте Void (обратите внимание на капитал V, так что Void и не void) ,

В подписи AsyncTask<params, progress, result>, первый тип массива, переданного в doInBackground(), то второй тип массива, используемого при вызове publishProgress() который вызывает onProgressUpdate() и третий тип данных, возвращаемых doInBackdround() и передается onPostExecute().

Например ...

private class MyAsyncTask extends AsyncTask<String, Integer, Boolean> 

... означало бы подписи метод был бы ...

doInBackground(String... params) 
onProgressUpdate(Integer... progress) 
onPostExecute(Boolean result) 
0

Поскольку AsyncTask имеет общие параметры, вы должны указать , а также. Если вы не используете ни один из них, то тип, который вы предоставляете, не имеет большого значения.

+0

но как я должен знать, что doInBackground должно быть местом, в котором ситуация .. или я могу просто поставить любую ситуацию, а любые другие 2 будут пустыми? Это займет это автоматически? – 2013-04-12 04:23:32

+0

@ user2198192 Что вы пытаетесь выполнить с помощью AsyncTask? –

0

Типы являются универсальными, поэтому вы можете использовать любой класс или примитивный тип. Когда вы хотите выполнить. Оператор в AsyncTasks использует его, создав его экземпляр, а затем вызовите execute() для этого экземпляра.

Гото: http://mysecretishelloworld.blogspot.in/2013/04/asynctask-usage-guide.html

для более широкого использования детальности AsyncTask.

родовые типы
0

http://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask в

трех типов, используемых асинхронной задачи являются следующие:

  1. Params, тип параметров послан к задаче при выполнении ,

  2. Прогресс, тип единиц прогресса, опубликованных во время вычисления фона.

  3. Результат, тип результата вычисления фона.

Не все типы всегда используются асинхронной задачей. Чтобы отметить тип как неиспользованный, просто используйте тип Void:

частный класс MyTask расширяет AsyncTask {...}

Пример

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
    int count = urls.length; 
    long totalSize = 0; 
    for (int i = 0; i < count; i++) { 
     totalSize += Downloader.downloadFile(urls[i]); 
     publishProgress((int) ((i/(float) count) * 100)); 
     // Escape early if cancel() is called 
     if (isCancelled()) break; 
    } 
    return totalSize; 
} 

protected void onProgressUpdate(Integer... progress) { 
    setProgressPercent(progress[0]); 
} 

protected void onPostExecute(Long result) { 
    showDialog("Downloaded " + result + " bytes"); 
} 
} 

URL parameter for doInBackground(URL... urls) 
You call publishProgress((int)somevalue) in doinBackground() to update progress. 
Integer parameter for onProgressUpdate(Integer... progress) 
Long (result) parameter for onPostExecute(). The result is received from doInBackground().  

Использование

new DownloadFilesTask().execute(url1, url2, url3); 
3

Асинхронный задача определяется 3 общих типов, называемых Params, Progress and Result, и 4 этапы, называемые onPreExecute, doInBackground, onProgressUpdate и onPostExecute.

родовых типов AsyncTask в:

три типа, используемый асинхронной задачей являются следующим:

Params -> the type of the parameters sent to the task upon execution. 
Progress -> the type of the progress units published during the background computation. 
Result -> the type of the result of the background computation. 

Не все типов всегда используется асинхронной задачей. Для того, чтобы пометить тип как неиспользуемые, просто использовать тип Пустоты:

private class MyTask extends AsyncTask<Void, Void, Void> { ... } 

AsyncTask и реализует 4 метода:

1. doInBackground: Код выполнения долго выполняющиеся операции идет в этом методе. Когда метод onClick выполняется по нажатию кнопки, он вызывает метод execute, который принимает параметры и автоматически вызывает метод doInBackground с переданными параметрами.

2. onPostExecute: Этот метод вызывается после завершения метода doInBackground. Результат от doInBackground передается этому методу.

3. onPreExecute: Этот метод вызывается до вызова метода DoInBackground.

4. onProgressUpdate: Этот метод вызывается вызовом publishProgress в любое время из doInBackground, вызывающего этот метод.

 Overriding onPostExecute, onPreExecute and onProgressUpdate is optional. 

Очки помнить:

1. Instance of Async Task needs to be created in UI thread. As shown in onClick method a new instance of LongOperation is created there. Also execute method with parameters should be called from UI thread. 

    2. Methods onPostExecute, onPreExecute and onProgressUpdate should not be explicitly called. 

3. Task can be executed only once. 

Давайте посмотрим на примере класса LongOperation, который расширяет AsyncTask ниже: исходный вид печати?

private class LongOperation extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... params) { 
      // perform long running operation operation 
      return null; 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#onPostExecute(java.lang.Object) 
    */ 
    @Override 
    protected void onPostExecute(String result) { 
      // execution of result of Long time consuming operation 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#onPreExecute() 
    */ 
    @Override 
    protected void onPreExecute() { 
    // Things to be done before execution of long running operation. 
    //For example showing ProgessDialog 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#onProgressUpdate(Progress[]) 
    */ 
    @Override 
    protected void onProgressUpdate(Void... values) { 
      /* Things to be done while execution of long running operation 
      is in progress. 
      For example updating ProgessDialog */ 
      } 
    } 
Смежные вопросы