0

我的Android应用程序使用AsyncTask从网站下载一些数据。Android后台线程和活动关系?

但是,当我按下活动启动后立即Android设备的后退按钮,工作线程的onPostExecute方法被调用,这是奇怪的,因为Android的所谓的onDestroy方法之前onPostExecute和onPostExecute方法上运行主要UIThread,我认为不存在了。

任何人都可以帮助我我不明白吗?

+1

AsyncTask的全部重点是在一个单独的线程上运行一个进程,因此它将在主UI线程的onDestroy之后完成,因为它不是同一个线程。如果你想在按回时杀死任务,你可以在onBackPressed()方法中调用yourTaskName.cancel()方法 – Neil

回答

2

AsyncTask基本上是在背景中作为一个独立的线程执行你想要的内容。所以当你退出UI时,这并不意味着你已经杀死了AsyncTask。它将继续它的正常生命周期并以onPostExecute结束。如果您也想要杀掉AsyncTask,则必须为AsyncTask调用cancel()函数。

虽然知道这一点,但实际上并不能杀死AsyncTask,这将由Android本身完成。因此,您必须等待一段时间,直到当前任务被终止(如果您致电cancel()),以便重新启动此特定AsyncTask

您还应该阅读onCancelled()方法。欲了解更多信息,请登录documentation

如果我犯了什么错误,请纠正我。

+0

ok。另一个问题。我的应用程序显示主要活动的一些数据,并且asynctask正在下载它们。这里是场景i不完全明白。虽然我的asynctask正在下载数据,我按Home按钮调用onStop方法,并且活动不再可见。这意味着我的asynctask不能刷新活动的观点? –

+1

就我看到的,在它仍然执行'doInBackground'的过程中,在UI中通过'asyncTask'更新的唯一部分是进度对话框。一旦你重新开始活动,它会被更新。在此之前,它并不实际更新对话框,而是存储进度。所以,如果这个比例是4%,那么你就会消失,它的处理量可以达到10%,而他们恢复活动会显示10%。 –