以下是这种情况:
我想在每次应用程序到达前台时检查设备是否已植根(因为他们通过App Drawer重新启动应用程序或通过“最近的应用程序”列表返回应用程序)。此检查在onResume()期间完成,并且运行良好。
问题是目的是在应用程序到达前台时仅检查一次root,而不是在用户当前正在使用该应用程序时。由于onResume()在Activity到达前台时被调用,这意味着即使不需要也会多次执行检查,这会带来性能成本。
我想过使用一个静态变量来锁定它,在我执行检查之前锁定,以确保只调用一次检查。这很好,花花公子,但问题是什么时候解锁?
在另一个Activity聚焦之前调用onPause() 会否定锁定。我尝试使用isFinishing(),但如果是用户 按下后退按钮,活动被破坏,重置了 root检查锁定并使其不太合意。编辑:此外,如果用户按下主页按钮,活动仍未完成,这意味着它还不够可靠
不保证调用onStop()和onDestroy(),并且 如果用户按下后退按钮,也会调用它们。
当app移动到后台时,有没有办法只调用一次函数,而不受上面onPause()的限制?我搜索了活动,应用程序和BroadcastReceiver文档,但无法找到有关此类内容的任何提及
答案 0 :(得分:0)
最后,我决定使用onUserLeaveHint(),自定义startActivity()和onBackPressed()来组合,使用一些私有静态和非静态变量
我使用onUserLeaveHint()来检测用户何时返回主页 或者到最近的应用列表。
onBackPressed()用于告诉应用程序它用于 导航,而另一个onBackPressed()覆盖写在 应用程序入口点,用于检测用户何时使用后退按钮返回 到家(不能相信用户LeaveHint()没有考虑到这一点)
自定义startActivity()确保onUserLeaveHint()不是 在另一个活动开始时调用。虽然onUserLeaveHint()存在强制中断问题(例如用户接收呼叫),但现在认为它是可接受的。
我做了一些研究并找到了this blog,但它使用了onStop(),但不保证能够运行
感谢所有回复。我理解对我的安全方法的担忧,但问题是关于检测用户何时离开应用程序