在Android中,通常在UI-Thread中不执行数据库操作(或者至少执行复杂的操作)是一种好的做法。我有一个具有复杂表单的活动,我想确保当活动在后台进行时(例如,用户按下主页按钮或电话打进来),所有数据都被保存。在活动的onPause()-method中,我可以启动一个AsyncTask,它将数据存储在数据库中,但我永远不能确定任务是否成功完成,因为安卓可以在任务完成之前终止进程,因为活动和整个应用程序都在后台。
我有很多以编程方式添加的视图,其中我无法确保Id的唯一性,并且使用saveInstanceState功能几乎是不可能的,因为我必须保存非常复杂的模型。
有没有可能确保在android终止进程之前保存数据,而不是在UI-Thread中执行?
发布于 2013-05-08 18:47:22
我曾经创建过一个应用程序,其中我有类似的数据一致性问题。我在那里所做的是将数据对象的存储委托给我专门为此目的而创建的服务。虽然这使得启动/停止/初始化Activity变得更加困难(一旦activity再次启动,您将不得不等待服务完成其先前启动的保存操作),但这是我能想到的处理此问题的唯一"Android“方法。
发布于 2013-05-08 18:45:54
如果你担心系统会在后台进程完成之前杀死你的后台进程,你可以考虑使用一个服务。这可能有点夸大其词,但肯定能达到预期效果=)如果你不确定如何使用,只需搜索"Android服务教程“即可。
除非你愿意,否则-Services是不会被杀的!
发布于 2013-05-08 18:47:47
事实上,如果你在onPause()中运行AsyncTask,安卓可以在不等待工作线程结束的情况下杀死你的应用程序的进程。但是,如果有一个正在运行的Service,它不会终止进程。因此,这里的一个很好的解决方案是使用IntentService实现数据库同步逻辑。
https://stackoverflow.com/questions/16438391
复制相似问题