我正在开发一个Android应用程序,我需要在用户进行市场更新时保存数据。实际上在更新开始之前。我尝试使用onDestroy()但是在更新应用程序时不会调用它。你有什么想法吗?
问题是应用正在定期保存数据。有时会发生这种情况,当你选择更新时,它会尝试在同一时间保存文件,导致数据损坏...这就是我试图检测更新事件的原因。
使用预定的线程(例如60秒)以固定间隔保存文件。同样在文件中,我使用经典的writeObject()保存了一个序列化的Object。这种情况只发生在60秒的固定速率,也发生在活动的onPause或服务的onDestroy()上。
但是,如果固定速率保存恰好在更新时发生(导致应用程序被销毁),则保存不完整,对象损坏,导致下次启动应用程序从保存文件中获取无效对象。
答案 0 :(得分:2)
在android上保存数据(来自Android developpers documentation)的一般方法是使用:
即使在常规活动生命周期中也应该使用它们,我也不明白为什么它们也不能解决更新之间的持久性需求。
为了避免损坏,如果您使用SQL,请使用SQLite Transaction,并在处理文件时检查此question是否存在损坏安全策略。
答案 1 :(得分:0)
AFAIK无法知道您的应用何时会更新(您没有收到与软件包相关的意图,因为您的应用在更新期间不再安装)。它将像往常一样被停止,所有广播接收器都未注册并更新。
可以做的是在您的应用中添加支票,以便在启动时检查它是否刚刚更新,并执行您必须执行的操作。这非常简单,只需在共享首选项中存储当前版本的应用程序(您可以通过PackageManager
获取),并在每次应用程序启动时检查存储的版本与当前版本。 / p>