ᴛʜᴇ*_*ᴛᴇʟ 3 android android-service android-studio android-sharedpreferences android-ondestroy
在活动被杀之前(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但事实并非如此.我正在调用onDestroy一个服务,不幸的是没有onPause办法覆盖那里......
根据文档,不要依赖该onDestroy()方法来保存您的数据.请onPause()改用.
注意:不要指望这种方法被称为保存数据的地方!
例如,如果某个活动正在编辑内容提供程序中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此处.通常实现此方法是为了释放与活动相关联的线程之类的资源,以便在其应用程序的其余部分仍在运行时,被破坏的活动不会留下这些东西.
在某些情况下,系统会简单地杀死活动的托管进程,而不会在其中调用此方法(或任何其他方法),因此它不应该用于执行在进程消失后保留的内容.
此外,您可以尝试使用该方法apply()而不是commit()您的方法,SharedPreferences.Editor因为它可以更快,异步地保存您的数据,并且根本没有要处理的返回值.
编辑:好的,所以你正在使用Service.问题是,它们的寿命可以Activity延长寿命,因为它们在后台运行.因此onDestroy(),即使您使用后退按钮关闭应用程序,您的服务也可能需要很长时间才能被调用.
我不确定你的应用程序应该如何工作,但我可以提出一些建议.
SharedPreferences在用户关闭应用程序时使用您,请将该方法移至Activity或;Activity#onPause()你可以破坏Service使用stopService()方法.(见下面的例子).Service应该做一些工作,如果完成这项工作后它应该修改SharedPreferences,你可以尝试使用IntentService,因为一旦这种服务完成它的工作,它将自我毁灭.但请注意,一次IntentService只能运行一个!它在FIFO队列上运行.IntentService,你也可以stopSelf()从你的常规内部打电话Service来阻止并销毁它.完成一个例子Service:
@Override
protected void onPause() {
    super.onPause();
    stopService(new Intent(context, YourService.class));
}
有关更多信息IntentService在本教程中.有关此链接Service生命周期的更多信息.
| 归档时间: | 
 | 
| 查看次数: | 3801 次 | 
| 最近记录: |