问题描述
“长代码”是指更新sqlite数据库的许多行。我已经实现了这一点。但是一些用户(只有少数)抱怨他们的数据没有更新。显然,仅当用户按下“后退”按钮时,该问题才会出现。也许活动在完成onPause()中的代码之前就死了?这是正常现象吗?
谢谢。
解决方法
直接来自the documentation about the Activity lifecycle:
onPause()的执行非常简短,不一定提供足够的时间来执行保存操作。因此,您不应使用onPause()保存应用程序或用户数据,进行网络调用或执行数据库事务。在该方法完成之前,此类工作可能无法完成。相反,您应该在onStop()期间执行重负载关闭操作。有关在onStop()期间执行的适当操作的更多信息,请参见onStop()。有关保存数据的更多信息,请参阅保存和还原活动状态。
基本上:是的,您不应该在onPause
中进行任何操作。
否,您不应该在onPause()
中调用繁重的任务(SQL事务)。
但是,您可以做的就是在数据更改后立即保存。
我建议您将RoomDB
与Kotlin Coroutines
一起使用,这样甚至不会阻塞您的用户界面。
您的问题尚不清楚。您应该发布代码,每个人都可以为您提供帮助。
我建议使用ViewModel或WorkManager执行任何需要完成的任务。不要将任务放在活动/视图上下文中。因为,活动/视图可能随时被破坏,因此您将很难控制。