android–SharedPreferences未保存在onDestroy of Service中

android–SharedPreferences未保存在onDestroy of Service中,第1张

概述在活动被杀死之前(当调用OnDestroy时),我在SharedPreferences中保存了一些int值.但我注意到的是,保存值需要大约一秒钟,但应用程序在销毁活动之前不会等待.在被杀之前我可以做某种等待吗?这是我的例子:@OverridepublicvoidonDestroy(){SharedPreferences.Editoreditor

在活动被杀死之前(当调用OnDestroy时),我在SharedPreferences中保存了一些int值.

但我注意到的是,保存值需要大约一秒钟,但应用程序在销毁活动之前不会等待.

在被杀之前我可以做某种等待吗?

这是我的例子:

@OverrIDepublic voID onDestroy(){    SharedPreferences.Editor editor = sharedPreferences.edit();    editor.putInt("finalXPos", finalX);    editor.putInt("finalYPos", finalY);    editor.commit();    super.onDestroy();    removeVIEw();}

======================&GT&GT编辑<< ====================我犯了一个错误,并说这是一个活动,但事实并非如此.我正在调用Service的onDestroy,不幸的是没有onPause方法来覆盖那里……

解决方法:

根据the docs,不要依赖onDestroy()方法来保存数据.请改用onPause().

@H_404_24@Note: do not count on this method being called as a place for saving
data!

For example, if an activity is editing data in a content
provIDer, @H_404_24@those edits should be committed in either onPause() or
onSaveInstanceState(Bundle), not here. This method is usually
implemented to free resources like threads that are associated with an
activity, so that a destroyed activity does not leave such things
around while the rest of its application is still running.

There are situations where the system will simply kill the activity’s hosting
process without calling this method (or any others) in it, so it
should not be used to do things that are intended to remain around
after the process goes away.

此外,您可以尝试在SharedPreferences.Editor上使用方法apply()而不是commit(),因为它可以更快,异步地保存数据,并且根本没有要处理的返回值.

编辑:好的,所以你正在使用服务.问题是,他们的生命周期可以比活动生命更长久,因为他们在后台继续运行.因此,即使您使用后退按钮关闭应用程序,服务的onDestroy()也可能需要很长时间才能被调用.

我不确定你的应用程序应该如何工作,但我可以提出一些建议.

>如果您想在用户关闭应用程序时处理您的SharedPreferences,请将该方法移动到Activity或;
>在Activity#onPause()内部,您可以使用stopService()方法销毁服务. (见下面的例子).
>如果你的服务应该做一些工作,如果完成这项工作后它应该修改SharedPreferences,你可以尝试使用IntentService,因为一旦这种服务完成它的工作,它将自我毁灭.但请注意,一次只能运行一个IntentService!它在FIFO队列上运行.
>如果您不想使用IntentService,您也可以从常规服务中调用stopSelf()来停止并销毁它.

完成服务的示例:

@OverrIDeprotected voID onPause() {    super.onPause();    stopService(new Intent(context, YourService.class));}

有关IntentService的更多信息,请访问this tutorial.
有关this link服务生命周期的更多信息.

总结

以上是内存溢出为你收集整理的android – SharedPreferences未保存在onDestroy of Service中全部内容,希望文章能够帮你解决android – SharedPreferences未保存在onDestroy of Service中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存