Android 0.8.11
您好,
我有一个使用sqlite3数据库的应用程序,它将保存可能会增长的几百条记录的内容。
使用启动画面加载记录。但是,当用户使用后退按钮关闭应用程序时,项目将被保存。但是,这可能需要很长时间。
运行长时间运行任务会产生什么影响。 android可以杀死它并破坏数据库吗?
是否可以在onPause期间创建一个线程,或者这是不好的做法?
感谢您的任何建议,
答案 0 :(得分:1)
最好的方法是启动IntentService
,这将为您完成繁重的工作。对于在ui线程上执行onResume
和onPause
方法,它们必须尽可能快地执行,否则可能导致屏幕冻结和ANR错误。所以你唯一应该做的就是用onPause
方法启动服务并让它完成它的工作:)
答案 1 :(得分:1)
从onPause
调用中启动一个线程是一个糟糕的实践,你可能会丢失一些数据:
在javadoc中,您可以阅读(强调我的):
在系统需要更多内存的情况下,它可能会终止暂停的进程以回收资源。因此,您应该确保在您从此功能返回时保存所有状态。
如果你在onPause
中启动一个线程以使其更快地返回,则该线程可能会在保存数据时被终止。
您应该在活动期间以增量方式保存记录,以避免在用户离开应用程序时一步完成所有记录的保存。您也可以将任务卸载到后台服务,但是您必须小心不要丢失任何数据,因为服务可能也会被杀死。