/**
* 主浏览处于栈顶
* 1.应用处于前台 刷新主页面
* 2.应用处于后台 开启应用 刷新主页面
*
* 主浏览器不在栈顶
* 1.应用处于前台 隐藏登录页 刷新主页面
* 2.应用处于后台 开启应用 隐藏登录页面 刷新主页面
*/
【MyReceiver】
if (AppUtil.isApplicationBroughtToBackground(context)) {//后台
Intent resultIntent = new Intent(context, MainActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
resultIntent.putExtra("url", url);
resultIntent.putExtra("push", "push");
context.startActivity(resultIntent);
EventBus.getDefault().post(new EventBusBean("push", "", "", "", url));
} else {//前台
if (AppUtil.isActivityTop(MainActivity.class, context)) {
//栈顶 刷新主页面
EventBus.getDefault().post(new EventBusBean("push", "", "", "", url));
} else {
//关闭登录页面 刷新主页面
//存在的问题 比如主页面之前打开过别的页面 比如手机登录 这时候点击返回健会有记录 体验不太好
EventBus.getDefault().post(new EventBusBean("push", "", "", "", url));
EventBus.getDefault().post(new EventBusBean("finish"));
}
}
LogUtil.e(TAG, "处于后台?=" + AppUtil.isApplicationBroughtToBackground(context) + "程序运行中?=" + AppUtil.isRunning(context) + "栈顶?=" + AppUtil.isActivityTop(MainActivity.class, context) + "url:" + url);
【AppUtil】判断app的各种状态
import android.app.Activity;
import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import java.util.List;
/**
* <pre>
* author :
* e-mail :
* time : 2017/11/15
* desc : 程序是否运行 处于前台还是后台 等app状态
* version: 1.0
* </pre>
*/
public class AppUtil {
/**
* 判断当前应用程序处于前台还是后台
*/
public static boolean isApplicationBroughtToBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
/**
* 后台转前台
*
* @param context
*/
public static void notifyAppToFront(Context context, Activity activity) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskList = activityManager.getRunningTasks(100);
for (ActivityManager.RunningTaskInfo task : taskList) {
//找到当前应用的task,并启动task的栈顶activity,达到程序切换到前台
if (task.topActivity.getPackageName().equals(context.getPackageName())) {
try {
Intent resultIntent = new Intent(context, Class.forName(task.topActivity.getClassName()));
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(resultIntent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return;
}
}
//若没有找到运行的task,用户结束了task或被系统释放,则重新启动activity
Intent resultIntent = new Intent(context, activity.getClass());
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(resultIntent);
}
/**
* 判断某activity是否处于栈顶
* 如果当前应用在前台好用 后台有些不灵敏
*
* @return true在栈顶 false不在栈顶
*/
public static boolean isActivityTop(Class cls, Context context) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
String name = manager.getRunningTasks(1).get(0).topActivity.getClassName();
return name.equals(cls.getName());
}
/**
* 程序是否正在运行
*
* @param context
* @return
*/
public static boolean isRunning(Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
for (ActivityManager.RunningTaskInfo info : list) {
if (info.topActivity.getPackageName().equals("com.tailin.webapps") && info.baseActivity.getPackageName().equals("com.tailin.webapps")) {
return true;
}
}
return false;
}
}