应用程序后台服务更新 sqlite 数据库。因此,我的活动变得过时了。活动意图还包含过时的参数,因此 onCreate、onResume 将使应用程序崩溃。一个最简单的解决方案是重新启动整个应用程序。我不想将 IF 添加到所有活动中的所有 onCreate、onResume 方法以处理一种特殊情况。
我注意到ACRA在处理异常后执行了以下代码。
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(10);
然而,许多人不鼓励使用System.exit(0)
. System.exit(0)
Android 应用程序数据完整性真的那么危险吗?当然,我的代码会在数据库存在之前关闭数据库。
更新:
我知道如何使用finish()
、内容提供者、发送广播、在 SO 上阅读许多答案等。但是,这些方法中的每一种都需要额外的数千行代码。System.exit(0)
我在十分钟内实施了解决方案。重启太快了,和普通的 startActivity 动作没有区别。数据库更新/重启是在用户长时间不活动后完成的,因此应用程序已经被系统挂起。我的应用不需要实时同步。在测试期间,应用程序行为正确。这是快速而肮脏的解决方案。
因此,我询问了有关System.exit(0)
. 不是我如何以不同的方式进行设计。我知道目前的设计并不完美。