当网络操作在Asynctask中运行时,如果用户按下后退按钮并切换到另一个活动,那么在后台运行的Asynctask会发生什么?
AsyncTask进程自动杀死操作系统?
异步任务完成整个操作?
答案 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。