android - 当我的 Activity 发生变化或破坏时,如何阻止 ASyncTask 崩溃?

标签 android android-asynctask screen-rotation android-anr-dialog

这可能是另一个问题的重复,我不确定。我读过类似的问题,但要么无法理解它,要么无法成功应用给定的解决方案。

我创建了一个具有多个选项卡的应用程序。大多数选项卡都使用 ASyncTask 在用户滑入选项卡时更新数据。但是,如果在 AST 仍在运行时 Activity 发生某些变化(这种情况经常发生;例如,当用户旋转屏幕或使用后退按钮退出时),应用程序将强制关闭 (ANR)。

这是我在 LogCat 中看到的情况:

10-30 11:30:01.422: E/AndroidRuntime(4687): FATAL EXCEPTION: main
10-30 11:30:01.422: E/AndroidRuntime(4687): java.lang.NullPointerException
10-30 11:30:01.422: E/AndroidRuntime(4687):     at com.appconstructor.khcreates.Core$refreshList.onPostExecute(Core.java:913)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at com.appconstructor.khcreates.Core$refreshList.onPostExecute(Core.java:1)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at android.os.AsyncTask.finish(AsyncTask.java:631)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at android.os.Looper.loop(Looper.java:137)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at android.app.ActivityThread.main(ActivityThread.java:4745)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at java.lang.reflect.Method.invokeNative(Native Method)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at java.lang.reflect.Method.invoke(Method.java:511)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-30 11:30:01.422: E/AndroidRuntime(4687):     at dalvik.system.NativeStart.main(Native Method)

据我所知,ASyncTask(刷新列表)无法处理没有应用程序可以应用更改的事实。

我想做的是制作一个在没有 Activity 时不会强制关闭的应用程序。

  1. 要么我希望 ASyncTask 在 Activity 停止时停止
  2. 或者我希望应用程序只保持任务运行,而不是强制关闭(例如:如果没有连接的 Activity ,则在 PostExecute() 上什么也不会发生。

如果有人需要我的 onPostExecute() 代码来解决问题,请告诉我。

这个问题困扰了我一段时间,我一直没能自己解决这个问题。存在此错误后,我的应用程序体验非常糟糕。非常感谢您的帮助!

提前致谢!

最佳答案

保留对您的任务的引用,并在 onDestroyonConfigurationChanges 方法中取消任务..

if(task != null && task.getStatus() == Status.RUNNING)
    task.cancel(true);

关于android - 当我的 Activity 发生变化或破坏时,如何阻止 ASyncTask 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13137292/

相关文章:

javascript - HTML5 - 在 View 播放器中打开 YouTube 视频

java - 在 onPostExecute 上的 AsyncTask 中,textview 值未设置

android - 无法让MediaRecorder以高采样率进行录制

java - 为什么 AsyncTask 不能很好地工作?

java - Android AsyncTask 中的 ArrayList

javascript - 使用窗口方向修复 ipad 缩放问题

android - 全屏播放 HTML5 视频时旋转屏幕

ios7 presenting view controller 呈现时不旋转,导致状态栏消失

java - 更新ADT后Eclipse无法导出apk文件?

android - 当我尝试在SQLite中运行提交数据的应用程序时,出现错误1语法错误