Java Android异步任务/服务在任务完成前被终止

Java Android异步任务/服务在任务完成前被终止,java,android,android-asynctask,android-service,Java,Android,Android Asynctask,Android Service,简介:我需要一种方法来启动一项任务,并让它通过应用程序的ondestory()持续到它完成为止,或者能够从它停止的地方重新开始 在我的应用程序中,我有一个列表视图,其中包含数据库中的一些项目。希望只有大约10-30项,但可能有数千项(如果用户从未清除它,尽管我会不时提示清除) 我已经设置了一个AsyncTask,以便在用户需要时从列表中清除所选项目。但是,我注意到,调用onDestroy()时,AsyncTask会被终止,例如,如果用户选择要删除的所有项目,按delete键,然后在任务仍在执行的

简介:我需要一种方法来启动一项任务,并让它通过应用程序的
ondestory()
持续到它完成为止,或者能够从它停止的地方重新开始

在我的应用程序中,我有一个
列表视图
,其中包含数据库中的一些项目。希望只有大约10-30项,但可能有数千项(如果用户从未清除它,尽管我会不时提示清除)

我已经设置了一个
AsyncTask
,以便在用户需要时从列表中清除所选项目。但是,我注意到,调用
onDestroy()
时,
AsyncTask
会被终止,例如,如果用户选择要删除的所有项目,按delete键,然后在任务仍在执行的情况下将应用程序刷出最近的部分

我记得在某处了解到
服务
异步任务
持续时间更长,因此当任务终止时,我将要删除的数据交给我创建的
服务
。它是通过

    intent.putIntegerArrayListExtra(list);
并在
服务中从中获取数据。
服务
的持续时间远长于
异步任务
(仅约4-6秒),但仍然不能完全完成。我对START_XXXX标志略知一二,但这对于这个任务来说是一个糟糕的做法,因为它们要么将整个列表发送回自身,要么永远不会真正停止

从数据库中删除所选项目的首选方法是什么?当应用程序被关闭时,数据库不会停止,或者至少在停止的地方重新启动


谢谢大家 没有理想的解决方案可以阻止这种情况的发生,因此大多数人最终要做的是警告用户,在操作过程中停止应用程序可能会产生不必要的后果

然而,在Android中,你有另一个更为健壮的选择:你可以编写一个持久的后台服务,即使你的应用程序没有运行,它也会继续运行,但这仍然不能解决
当您从数据库中删除时,如果用户关闭手机会发生什么?
这将是给定您上下文的下一个逻辑问题。(就我个人而言,我不会为你的任务推荐这种方法)

您最好为尚未删除的每一行编写一个共享首选项(这将是开始删除时要删除的行的完整列表)。对于您删除的每一行(或一组行),更改此首选项以从首选项中删除这些行,然后如果应用程序被中断,则在重新启动应用程序时,阅读此首选项并从停止的位置继续

或者,做其他人做的事情,并警告用户(例如通过使用对话框),在删除之前,他们不应该停止应用程序,否则会发生不好的事情,等等


我强烈建议您不要使用服务,因为它比异步任务持续的时间更长。这太老套了,一点也不可靠。

难道你不能等到onDestroy()开始时任务完成了吗?@BartHofma这是可以接受的做法吗?如果是的话,你将如何做到这一点?谢谢,我不知道这是否可以接受,我会这么做的。我猜这也取决于你在构建什么样的应用程序。如果使用以下选项启动活动,则可以等待活动完成:(意图是您的活动)startActivityForResult(意图,0)//完成后,onResult方法将运行到continueyes,可能不是SharedReferences,只需在数据库中添加一个属性“toBeDeleted”,在开始删除之前将行设置为true,然后按照建议Kha,当用户终止应用程序时,您就知道还有什么需要删除了。因此,当用户重新打开应用程序时,检查是否有更多行要删除,然后删除它们。