在活动被杀之前(调用OnDestroy
时),我在int
中保存了一些SharedPreferences
个值。
但我注意到,要保存这些值需要大约一秒钟,但应用程序在销毁Activity
之前不会等待它。
我可以在被杀之前做某种Wait
吗?
这是我的榜样:
@Override
public void onDestroy(){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt("finalXPos", finalX);
editor.putInt("finalYPos", finalY);
editor.commit();
super.onDestroy();
removeView();
}
======================>>编辑<< ======================
我犯了一个错误并说这是Activity
,但事实并非如此。我正在调用Service的onDestroy
,遗憾的是,没有onPause
方法可以覆盖那里......
答案 0 :(得分:7)
根据the docs,不要依赖onDestroy()
方法来保留您的数据。请改用onPause()
。
注意:不要指望此方法被称为保存地点 数据!
例如,如果活动正在编辑内容中的数据 提供者,应该在onPause()或中提交这些编辑 onSaveInstanceState(Bundle),不在这里。这种方法通常是 实现释放资源,如与线程相关联的线程 活动,以便被破坏的活动不会留下这样的东西 当其余的应用程序仍在运行时。
在某些情况下,系统会简单地杀死活动的托管 进程中没有调用此方法(或任何其他方法),所以它 不应该被用来做那些打算留下来的东西 过程消失后。
此外,您可以尝试在SharedPreferences.Editor
上使用方法apply()
而不是commit()
,因为它可以更快,异步地保存您的数据,并且没有返回值处理完毕。
编辑:好的,您正在使用Service
。问题是,它们的寿命可以延长Activity
生命,因为它们一直在后台运行。因此,即使您使用后退按钮关闭应用,服务的onDestroy()
也可能需要很长时间才能被调用。
我不确定您的应用应该如何运作,但我可以提出一些建议。
SharedPreferences
,请将该方法移至Activity
或; Activity#onPause()
内,您可以使用stopService()
方法销毁Service
。 (见下面的例子)。Service
应该做一些工作,如果完成这项工作后它应该修改SharedPreferences
,你可以尝试使用IntentService
,因为一旦这种服务完成它的工作,它会自我毁灭。但请注意,一次只能运行一个IntentService
!它在FIFO队列上运行。IntentService
,还可以从常规Service
内拨打stopSelf()
以停止并销毁它。 完成Service
的示例:
@Override
protected void onPause() {
super.onPause();
stopService(new Intent(context, YourService.class));
}
有关this tutorial IntentService
的更多信息。
有关this link上Service
生命周期的更多信息。
答案 1 :(得分:2)
onDestroy
方法,可以在Service
中找到{p> stopService()
。
虽然您想清除服务中的共享首选项,但这确实不可靠。我确信会有一个Activity
启动Service
。
我会在Activity
中创建一个方法,就像这样。
private void stopService() {
stopService(new Intent(getApplicationContext(), MyService.class));
}
每当您想要真正杀死该应用时,您都可以调用stopService(..)
这样的电话。
private void stopService() {
clearPref();
stopService(new Intent(getApplicationContext(), MyService.class));
}
private void clearPref() {
// Clearing all data from Shared Preferences
editor.clear(); // where editor is an Editor for Shared Preferences
editor.commit();
}
对于服务,您需要考虑应用程序生命周期的多个场景。通常很难想到情况,但我相信你能够弄清楚。祝你好运!