Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 如何结束AsyncTask onBackPress(),如果它没有完成,它是否仍然运行?_Android - Fatal编程技术网

Android 如何结束AsyncTask onBackPress(),如果它没有完成,它是否仍然运行?

Android 如何结束AsyncTask onBackPress(),如果它没有完成,它是否仍然运行?,android,Android,我在几个活动中使用AsyncTask 我知道如何覆盖反压 但是,当异步任务正在运行时,我想让用户能够返回,即使异步任务仍在运行 我该怎么做 当启动异步任务的活动在完成之前关闭时,异步任务是否仍在运行?即使应用程序已关闭,异步任务也将继续运行。你必须小心这一点,因为你的任务会泄露你的上下文,如果它有一个对它的引用,那么只要你的任务还在运行,就把它保存在内存中。您可以通过使用WeakReference引用您的活动来避免这种情况 您可以使用停止正在运行的任务。cancel将让任务完成其doInBack

我在几个活动中使用AsyncTask

我知道如何覆盖反压

但是,当异步任务正在运行时,我想让用户能够返回,即使异步任务仍在运行

我该怎么做


当启动异步任务的活动在完成之前关闭时,异步任务是否仍在运行?

即使应用程序已关闭,异步任务也将继续运行。你必须小心这一点,因为你的任务会泄露你的上下文,如果它有一个对它的引用,那么只要你的任务还在运行,就把它保存在内存中。您可以通过使用WeakReference引用您的活动来避免这种情况

您可以使用停止正在运行的任务。cancel将让任务完成其doInBackground,但不会调用onPostExecute。您可以通过检查中断您的后台例程,以便在任务结束后尽早返回

我删除了一半的帖子


我把中断和线程停止混淆了!使用true当然不会停止实际线程。多谢托里德和他的朋友们证明了我的错误!勒特上了一课,谢谢你

即使应用程序已关闭,异步任务仍将继续运行。你必须小心这一点,因为你的任务会泄露你的上下文,如果它有一个对它的引用,那么只要你的任务还在运行,就把它保存在内存中。您可以通过使用WeakReference引用您的活动来避免这种情况

您可以使用停止正在运行的任务。cancel将让任务完成其doInBackground,但不会调用onPostExecute。您可以通过检查中断您的后台例程,以便在任务结束后尽早返回

我删除了一半的帖子


我把中断和线程停止混淆了!使用true当然不会停止实际线程。多谢托里德和他的朋友们证明了我的错误!勒特上了一课,谢谢你

异步任务继续运行,直到完成或取消。因此,在您的情况下,用户返回并结束主要活动,异步任务将继续

如果您确实想从onBackPressed结束AsyncTask,那么您最好调用

myAsyncTask.cancel(true);
但是所做的只是调用任务的onCancelled,它可以设置一个cancel标志,通常可以在doInBackground中进行检查,如果设置了该标志,则任务可以返回

请注意,使用canceltrue不会停止任务。文档讨论了为真实情况中断任务,但它们的意思是在doInBackground运行时调用onCancelled,此时任务有机会设置doInBackground可以检查的标志


对于真实情况,如果任务未实现onCancelled,和/或未设置/检查标志,则任务将完成doInBackground,但onPostExecuteObject从未被调用-这相当于错误情况。

异步任务将继续运行,直到完成或取消。因此,在您的情况下,用户返回并结束主要活动,异步任务将继续

如果您确实想从onBackPressed结束AsyncTask,那么您最好调用

myAsyncTask.cancel(true);
但是所做的只是调用任务的onCancelled,它可以设置一个cancel标志,通常可以在doInBackground中进行检查,如果设置了该标志,则任务可以返回

请注意,使用canceltrue不会停止任务。文档讨论了为真实情况中断任务,但它们的意思是在doInBackground运行时调用onCancelled,此时任务有机会设置doInBackground可以检查的标志


对于真实情况,如果任务未实现onCancelled,和/或未设置/检查标志,则任务将完成doInBackground,但onPostExecuteObject从未被调用-这相当于错误情况。

那么我将CancelTrue放在何处?如何回答?当您想停止正在运行的任务时,您可以这样做。在“上一步”按钮上,单击“活动销毁…”。。。在你需要的地方。请考虑使用true。这是你的决定,但这可能会导致非常严重的错误,在更复杂的应用程序中很难找到。比如什么类型的错误?如果我把它设为false会怎么样?我正在解析一些数据,所以我认为它不会引起任何问题。那么我把cancletrue放在哪里呢?我怎么回答呢?当您想停止正在运行的任务时,您可以这样做。在“上一步”按钮上,单击“活动销毁…”。。。在你需要的地方。请考虑使用true。这是你的决定,但这可能会导致非常严重的错误,在更复杂的应用程序中很难找到。比如什么类型的错误?如果我将其设置为false会发生什么呢?我正在分析一些数据,所以我认为这不会导致任何问题。这不完全是真的,请看,事实上,我在非泄漏多个异步任务中的经验是调用canceltrue是完全可以的。当文档谈到中断任务时
r在真实情况下,它们的意思是在doInBackground运行时调用onCancelled,此时任务有机会设置doInBackground可以检查的标志。对于真正的情况,如果任务没有实现onCancelled,和/或它没有设置/检查标志,任务将完成doInBackground,但onPostExecuteObject永远不会被调用-这相当于错误的情况。好吧,我太愚蠢了!!!我把中断和停止搞混了!投票给你!!!你能提交一个编辑,让我投票支持你吗?我会更新我的答案。非常感谢…这不完全是真的,请看,事实上,我在无泄漏多个异步任务方面的经验是调用canceltrue完全可以。当文档谈到为真实情况中断任务时,它们的意思是在doInBackground运行时调用onCancelled,此时任务有机会设置doInBackground可以检查的标志。对于真正的情况,如果任务没有实现onCancelled,和/或它没有设置/检查标志,任务将完成doInBackground,但onPostExecuteObject永远不会被调用-这相当于错误的情况。好吧,我太愚蠢了!!!我把中断和停止搞混了!投票给你!!!你能提交一个编辑,让我投票支持你吗?我会更新我的答案。非常感谢。。。