其实这个开发主要是一种开发思路:我的思路大致是这样的。
1. 首先在启动这个具体的activity之前,判断当前应用是否在栈顶,如果在,就不启动主Activity了,如果不在则启动主Activity;
2. 启动通知具体指向的Activity
启动通知具体指向及启动主Activity的具体代码:
Intent i = new Intent();
startHomeActivity(context);
MobclickAgent.onEvent(context, "TabMain_InsuranceDeduction");
i.setClass(context, GetInsuranceRequestActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
if (i.getComponent() != null || i.getAction() != null)
context.startActivity(i);
实际上,上述代码可能会启动两个Activity,原因是:如果当前应用不在栈顶,则先启动主Activity,然后在启动具体指向的Activity;如果在栈顶,则只启动具体的Activity
判断当前Activity是否在栈顶的具体代码如下:
private void startHomeActivity(Context context){
if (!isAppOnForeground(context)){
Intent homeIntent = new Intent(context, HomeActivity.class);
homeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(homeIntent);
}
}
public boolean isAppOnForeground(Context context) {
ActivityManager activityManager= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1);
if (tasksInfo.size() > 0) {
// 应用程序位于堆栈的顶层
if (context.getPackageName().equals(tasksInfo.get(0).topActivity
.getPackageName())) {
return true;
}
}
return false;
}