Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android后台线程和活动关系?_Android_Android Activity_Activity Lifecycle_Background Thread - Fatal编程技术网

Android后台线程和活动关系?

Android后台线程和活动关系?,android,android-activity,activity-lifecycle,background-thread,Android,Android Activity,Activity Lifecycle,Background Thread,我的android应用程序使用AsyncTask从网站下载一些数据 但当我在活动开始后立即按下android设备的后退按钮时,会调用worker线程的onPostExecute方法,这是因为android在onPostExecute之前调用了onDestroy方法,而onPostExecute方法在主UIThread上运行,我认为它已经不存在了 有谁能帮我解释一下我不明白的地方吗?一个异步任务基本上是在后台作为一个独立于UI的线程执行你想要的任务。因此,当您退出UI时,这并不一定意味着您已经终止

我的android应用程序使用AsyncTask从网站下载一些数据

但当我在活动开始后立即按下android设备的后退按钮时,会调用worker线程的onPostExecute方法,这是因为android在onPostExecute之前调用了onDestroy方法,而
onPostExecute
方法在主UIThread上运行,我认为它已经不存在了


有谁能帮我解释一下我不明白的地方吗?

一个
异步任务基本上是在后台作为一个独立于UI的线程执行你想要的任务。因此,当您退出UI时,这并不一定意味着您已经终止了异步任务。它将继续其正常的生命周期,并在
onPostExecute
中结束。如果您想同时终止
AsyncTask
,则必须调用
AsyncTask
cancel()
函数

但是要知道,你不能真正杀死一个
AsyncTask
,这将由安卓自己完成。因此,您必须等待一段时间,直到当前任务被终止(如果调用
cancel()
),才能重新启动此特定的
AsyncTask

您还应该阅读
onCancelled()
方法。有关更多信息,请查看


如果我犯了任何错误,请纠正。

异步任务的全部要点是在单独的线程上运行进程,因此它将在主UI线程的onDestroy之后完成,因为它不是同一个线程。如果您想在按下back键时终止任务,可以在onBackPressed()方法中调用您的TaskName.cancel()。另一个问题。我的应用程序显示了一些主要活动的数据,asynctask正在下载这些数据。下面是我不完全理解的场景。当我的asynctask正在下载数据时,我按下home按钮调用onStop方法,活动不再可见。这意味着我的asynctask可以
t刷新活动的视图??据我所知,当它仍在执行
doInBackground
时,通过
asynctask
在UI中更新的唯一部分是一个进度对话框。一旦您恢复活动,将立即更新。在此之前,它不会实际更新对话框,而是存储进度。因此,如果它是在4%,你去,它的处理高达10%,如果你继续活动,它将显示10%。