仅当整个应用程序失去焦点(例如来电或主页键)时,我才需要记录事件。
从外部事件而不是同一应用程序中的另一个 Activity 中判断 Activity 已暂停或停止的最佳方法是什么?
谢谢
仅当整个应用程序失去焦点(例如来电或主页键)时,我才需要记录事件。
从外部事件而不是同一应用程序中的另一个 Activity 中判断 Activity 已暂停或停止的最佳方法是什么?
谢谢
当您的活动停止时,您可以在该方法中检查您的应用程序是否仍在顶部onStop()
:
private boolean isAppOnTop(){
ActivityManager am = (ActivityManager) getSystemService(Service.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks;
tasks = am.getRunningTasks(1);
RunningTaskInfo running = tasks.get(0);
if(running.topActivity.getPackageName().equals("your.package.name")){
return true;
}
else{
return false;
}
}
该方法首先查询所有正在运行的任务。通常,具有焦点的任务位于堆栈顶部。检查此任务是否属于您的包。
因此,如果您愿意设置 get_tasks 权限,丹尼斯的回答是完全有效的,我们探索了以下选项(主要基于在调用 onstop/onpause 时设置某种标志):
开始新活动时。在 onStop 方法中,如果标志设置为 true,则中断是由应用程序中的新活动引起的。
有一个统计活动视图的全局变量。onStarts 的增量和 onStops 的减量。如果它为 0,那么我们没有可见的活动。
onStart 为活动设置一个活动标志为真。onStop 将标志设置为 false。(状态也可以保存到首选项)。当活动失去焦点时,我们可以检查所有标志。
因为该应用程序相对简单,我们选择了第一个选项。