当Activity更改时运行AsyncTasks会发生什么?

时间:2015-06-27 05:13:43

标签: android android-asynctask

当网络操作在Asynctask中运行时,如果用户按下后退按钮并切换到另一个活动,那么在后台运行的Asynctask会发生什么?

  1. AsyncTask进程自动杀死操作系统?

  2. 异步任务完成整个操作?

3 个答案:

答案 0 :(得分:38)

如果在Activity中启动AsyncTask并旋转设备,则将销毁Activity并创建新实例。

同样,如果用户导航到另一个活动,当前活动将被销毁或进入后台活动堆栈,新活动将在前台。

但AsyncTask不会死。它会继续生存直到它完成。 完成后,AsyncTask不会更新新Activity的UI。实际上,它更新了之前不再显示的活动实例。这可能导致java.lang.IllegalArgumentException类型的异常:如果您使用findViewById来检索Activity中的视图,则View不会附加到窗口管理器。

答案 1 :(得分:30)

AsyncTask 是一个抽象的Android类,可以帮助Android应用程序以有效的方式处理主UI线程。 AsyncTask类允许我们执行持久的任务/后台操作,并在UI线程上显示结果,而不会影响主线程。

1。 AsyncTask进程不会被操作系统自动杀死。 AsyncTask进程在后台运行,负责在任何情况下完成自己的工作。您可以通过调用cancel(true)方法取消AsycnTask。这将导致后续调用isCancelled()返回true。在调用此方法之后,在doInBackground()返回后调用onCancelled(Object)方法而不是onPostExecute()。

2。完成操作后,后台线程正在停止。 AsyncTask有一个 onPostExecute(),一旦你的工作完成就会被调用。在 doInBackground()方法完成处理后调用此方法。来自 doInBackground()的结果将传递给此方法。

答案 2 :(得分:1)

AsyncTask仍然会运行并尝试在Zombie Activity上发布结果。最好是用户AsyncTaskLoader。