AsyncTask:doInBackground()的返回值在哪里去?

当调用AsyncTask<Integer,Integer,Boolean> ,其中的返回值为:

protected Boolean doInBackground(Integer... params)

通常我们用new AsyncTaskClassName().execute(param1,param2......);启动AsyncTask new AsyncTaskClassName().execute(param1,param2......); 但它似乎没有返回一个值。

哪里可以finddoInBackground()的返回值?

然后可以在onPostExecute中使用该值,您可能想要重写该值以处理结果。

以下是Google文档中的示例代码片段:

  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)); } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } } 

您可以通过调用AsyncTask类的get()方法来检索protected Boolean doInBackground()的返回值:

 AsyncTaskClassName task = new AsyncTaskClassName(); bool result = task.execute(param1,param2......).get(); 

但要小心UI的响应,因为get()等待计算完成并将阻塞UI线程
如果您正在使用内部类,最好将这个作业放到onPostExecute(布尔结果)方法中。

如果你只是想更新用户界面, AsyncTask为你提供了两个可能:

  • 要在doInBackground()执行的任务并行地更新UI(例如更新ProgressBar ),您必须在doInBackground()方法内调用publishProgress() 。 然后,您必须更新onProgressUpdate()方法中的UI。
  • 要在任务完成时更新UI,您必须在onPostExecute()方法中执行此操作。
  •  /** This method runs on a background thread (not on the UI thread) */ @Override protected String doInBackground(String... params) { for (int progressValue = 0; progressValue < 100; progressValue++) { publishProgress(progressValue); } } /** This method runs on the UI thread */ @Override protected void onProgressUpdate(Integer... progressValue) { // TODO Update your ProgressBar here } /** * Called after doInBackground() method * This method runs on the UI thread */ @Override protected void onPostExecute(Boolean result) { // TODO Update the UI thread with the final result } 

    这样你就不必关心响应性问题。