【问题标题】:Is it ok to run long code inside onPause() in Android Activity?可以在 Android Activity 的 onPause() 中运行长代码吗?
【发布时间】:2020-09-26 02:47:34
【问题描述】:

“长代码”是指更新 SQLite 数据库的许多行。我已经实现了这一点。但是一些用户(只有少数)抱怨他们的数据没有更新。显然,只有当用户按下后退按钮时才会出现问题。也许 Activity 在完成 onPause() 中的代码之前就死了?这是正常现象吗?

提前致谢。

【问题讨论】:

  • 你的意思是要在onPause里面放一个方法?

标签: android android-sqlite onpause


【解决方案1】:

直接来自the documentation about the Activity lifecycle

onPause() 执行非常短暂,不一定有足够的时间来执行保存操作。因此,您不应该使用 onPause() 来保存应用程序或用户数据、进行网络调用或执行数据库事务;在该方法完成之前,此类工作可能无法完成。相反,您应该在 onStop() 期间执行重负载关闭操作。有关在 onStop() 期间执行的合适操作的更多信息,请参阅 onStop()。有关保存数据的更多信息,请参阅保存和恢复活动状态。

基本上:是的,你不应该在onPause 中做任何事情。

【讨论】:

  • 非常感谢。答案再清楚不过了。最好的问候。
【解决方案2】:

不,您不应该在onPause() 中调用繁重的任务(SQL 事务)。
但是,您可以做的是在数据更改后立即保存数据。
我建议您将RoomDBKotlin Coroutines 一起使用,这甚至不会阻塞您的用户界面。

【讨论】:

  • 非常感谢。我会听从你的建议。
【解决方案3】:

你的问题还不清楚。你应该发布你的代码,每个人都可以帮助你。

我建议使用ViewModelWorkManager 来执行任何需要完成的任务。不要将您的任务放在您的活动/视图上下文中。因为,活动/视图可能会在您难以控制的任何时候被破坏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多