当我使用"正在运行的服务"选项卡下的"停止"按钮停止服务时,将调用onDestroy()方法。
但是当我强制停止应用程序时,从未调用过onDestroy()。
关于这个有什么解释吗?
还是在强制停止时触发onDestroy()的解决方案?
谢谢!
当您强行停止应用程序时,确实会发生-这是强制停止。没有警告,没有回调,只是停止了。整个过程将被终止,并且不会向任何正在运行的组件(活动,服务等)发出任何警告。
绝对不能保证将调用onDestroy()。将所有应用程序关键代码移到onPause()中,在大多数情况下会调用该代码。
好答案。但是,问题特别是关于服务,它们不会暂停或具有onPause()方法。与其他组件相比,服务没有很大的生命周期。如果最后需要做一些重要的事情,也许可以编写该服务以保存它的工作状态,并在重新启动时从中断处继续执行。或者,更好的是,避免让用户因行为"良好"并且尽可能短时间而杀死您的服务。 :)
从文档中:
Once the activity is created, onPause() is the last method that's guaranteed to be called before the process can be killed... onStop() and onDestroy() might not be called. Therefore, you should use onPause() to write crucial persistent data (such as user edits) to storage.
要重申这一点,Force Stop并不是为了优雅而以谨慎的方式退出应用程序。如果您有每次应用程序完成时都必须运行的关键代码,则需要在onPause()中运行它。
如果您使用BIND_AUTO_CREATE在Activitys的onCreate()方法中启动服务并在onDestroy()中取消绑定,该怎么办?如果该活动被过早终止并且从未调用过onDestroy(),则该服务将继续运行。
我不确定您要做什么,但是垃圾收集器可能会识别出该服务是孤立的,并在几分钟内将其清除。
这是活动的文档-OP与服务有关。
服务没有onPause()方法。请再次阅读问题。
答案未提供问题中要求的相关信息。问题与服务有关,给出的文档链接与活动有关。服务没有暂停和停止状态。
我假设您有要在onDestroy()中执行的代码,引用您的代码行:
"or maybe a solution to fire onDestroy() when force-stopped?"
Service方法public void onTaskRemoved(Intent rootIntent)是您要寻找的方法,当应用程序被强制停止时将被调用。
不要认为那是真的。如果强制停止应用程序,则不能保证onTaskRemoved()会被调用。
通过从最近的应用程序中刷杀您的应用程序时,将调用服务中的onTaskRemoved()
@chetna的回答是正确的。仅当用户滑动关闭您的应用程序时才触发此回调,或者这意味着从任务队列/最近的任务中关闭应用程序。当应用程序强制停止时,它不会触发。
当应用程序强制停止时,将调用Process.killProcess(),但不会调用onDestroy()函数。通过此链接。您会知道的。
Android强制停止回调到应用程序?