长时间睡眠后会自动导航,导致Android应用ANR

时间:2019-07-04 18:14:49

标签: android kotlin

我有一个可以在信息亭模式下运行很长时间(几天)的应用。它会在片段A上停留8个小时,然后它会自动移动到片段B。有时会产生ANR,而应用程序再也不会到达片段B(实际上,不会调用片段B的onCreateView)。

我在片段A上,如果应用程序的主要任务已经完成,我会调用以下代码:

    flag = true
    if (screenService.isScreenOn())
        navigator.goToFragmentB()

虽然屏幕可能会熄灭,但导航不会发生。

在片段A的onResume中,我有以下代码

    super.onResume()
    if (flag)
        navigator.goToFragmentB()

如果在上述标志设置为true的两个小时内打开平板电脑,一切都很好,并且我位于所需的片段B上。但是,如果我等待3-4个小时或更长时间,有时应用程序仍停留在片段A上,并且无响应(ANR)。

这是我用于导航的代码:

        val navController = getNavController(fragment)
        if (navController != null && canNavigate(navController, actionId)) {
            Handler(Looper.getMainLooper()).post {
                navController.navigate(actionId)
            }
        } else {
            logNavError()
        }

    private fun canNavigate(navController: NavController, actionId: Int): Boolean {
        return navController.currentDestination?.getAction(actionId) != null
    }

我有一种方法可以通过在标志变为true之后立即打开屏幕并在那里导航到B来使其工作。但是,这意味着我可能在用户可能正在睡觉的时候打开应用程序的屏幕。

logcat中没有错误,该问题仅偶尔发生。

0 个答案:

没有答案