0

仅当整个应用程序失去焦点(例如来电或主页键)时,我才需要记录事件。

从外部事件而不是同一应用程序中的另一个 Activity 中判断 Activity 已暂停或停止的最佳方法是什么?

谢谢

4

2 回答 2

2

当您的活动停止时,您可以在该方法中检查您的应用程序是否仍在顶部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;
    }
}

该方法首先查询所有正在运行的任务。通常,具有焦点的任务位于堆栈顶部。检查此任务是否属于您的包。

于 2012-11-08T18:47:39.910 回答
1

因此,如果您愿意设置 get_tasks 权限,丹尼斯的回答是完全有效的,我们探索了以下选项(主要基于在调用 onstop/onpause 时设置某种标志):

  • 开始新活动时。在 onStop 方法中,如果标志设置为 true,则中断是由应用程序中的新活动引起的。

  • 有一个统计活动视图的全局变量。onStarts 的增量和 onStops 的减量。如果它为 0,那么我们没有可见的活动。

  • onStart 为活动设置一个活动标志为真。onStop 将标志设置为 false。(状态也可以保存到首选项)。当活动失去焦点时,我们可以检查所有标志。

因为该应用程序相对简单,我们选择了第一个选项。

于 2012-11-13T17:38:33.167 回答