如何检测活动是否在最顶层

时间:2016-09-02 16:41:44

标签: android android-activity

在运行后台服务的应用中,定期会触发某个应用需要显示活动的事件。

问题是,如果该活动已经在顶部,如何不打开另一个活动。

以下片段每当触发事件时,showAlertActivity()将尝试打开活动(它不仅仅是一个警报)。

有没有办法检查是否有一个已打开?谢谢!

public void showAlertActivity(String title, String msg……) {

    // this does not work, throws a exception 
    //“ava.lang.SecurityException: Permission Denial: getTasks() from pid=24139, uid=10048 requires android.permission.GET_TASKS”
    ActivityManager mngr = (ActivityManager) mContext.getSystemService( Activity.ACTIVITY_SERVICE );

    List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);

    for (ActivityManager.RunningTaskInfo info: taskList) {


        Log.d(“+++ info.numActivities:" + info.numActivities +", info.topActivity.getClassName():"+info.topActivity.getClassName()+", info.baseActivity:"+info.baseActivity.getClassName());


    }

    Intent intent = new Intent(mContext, TheAlertActivity.class);
    dialogIntent.putExtra(Constants.LAYOUT_RESOURCE_ID, R.layout.alert_form);
    dialogIntent.putExtra(Constants.TILTLE, title);
    dialogIntent.putExtra(Constants.TEXT, msg);
    ……
    dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    mContext.startActivity(intent);
}

1 个答案:

答案 0 :(得分:0)

在您要检查的活动中添加一些内容,isOpen会告诉您当前是否在最佳状态。

public static boolean isOpen = false;
private static int countOpen = 0;

public void onStart() {
    super.onStart();
    countOpen++;
    isOpen = countOpen > 0;
}

public void onStop() {
    super.onStop();
    countOpen--;
    isOpen = countOpen > 0;
}

添加计数以确保布尔值正确,即使您因为某种原因在自身前面打开活动,系统有时会在旧活动onStart()之前调用新活动onStop()。 / p>