我的应用关闭后,应用崩溃了

时间:2017-09-22 20:00:20

标签: java android android-asynctask

这是我希望不会发生的事情,因此我需要从这里获得帮助。

在我的应用程序中,我执行()一个AsyncTask,可能需要不到2-3秒。在那个AsyncTask中,我有runOnUiThread(),它可以更新几个UI控件值。

如果我单击“注销”按钮执行活动的结束(),则此工作正常。

我得到Null指针异常,findViewById返回null。我可以在更新之前添加空检查,但考虑到UI屏幕和使用的AsyncTasks的数量,我最终将进行大量检查。

这种情况的最佳解决方案是什么? 仅当与AsyncTask完成和调用finish()之间的时间差异完全一致时才会发生问题。

1 个答案:

答案 0 :(得分:0)

避免调用runOnUiThread()方法来更新AsyncTask的doInBackground()中的进度。你有onProgressUpdate()。以下是如何在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");
     }
 }

请记住,在AsyncTask中,只有一个方法在后台线程上运行 - doInBackground(),其余方法在MainThread上运行。

相关问题