http://blog.****.net/vpractical/article/details/51034360
需求是计算app在后台的时间,当返回前台时,根据时间差来做相应的操作。
思路是让app中所有的activity都继承baseactivity,然后在baseactivity的onstop()方法中用以下方法判断是否在后台。如果是就开始计时。
在app中做一个标记,记录app是否刚从后台回来。
在onresume()方法中先判断标记是否是刚从后台回来,是的话判断两个时间差跟用户设定的时间是否符合。
BaseActivity中的操作
@Override
protected void onStop() {
super.onStop();
boolean background = AppIsBackgroundOrForeGroundUtils.isBackground(this);//里面封装的判断前后台的方法。
if (background) {
MyApp.isToBackground = true;
MyApp.currentTime = SystemClock.currentThreadTimeMillis();
} } @Override
protected void onResume() {
super.onResume();
if (MyApp.isToBackground) {
MyApp.isToBackground = false;
long diffTime = SystemClock.currentThreadTimeMillis() - MyApp.currentTime; String setTime = UserInfoCacheSpHelper.getInstance(this).getUserData(Constant.SAFETIME);
if(setTime==null||"总是".equals(setTime)){
setTime=0+"";
}
long saveTime = Integer.parseInt(setTime) * 60 * 1000;
if ((diffTime - saveTime) >= 0) {
finish();
startActivity(new Intent(this, SplashActivity.class));
}
} }
判断是否在后台的两种方法:
/**
* Created by Administrator on 2016/12/2.
*/
public class AppIsBackgroundOrForeGroundUtils { /**
*判断当前应用程序处于前台还是后台
* 该方法通过RunningTaskInfo类判断,需要在清单文件中添加权限
* <uses-permission android:name="android.permission.GET_TASKS" />
*/
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; } /**
* 通过RunningAppProcessInfo类判断(不需要额外权限):
* @param context
* @return
*/
public static boolean isBackground(Context context) { ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.processName.equals(context.getPackageName())) {
if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
Log.i("background", appProcess.processName+"后台");
return true;
}else{
Log.i("background", appProcess.processName+"前台");
return false;
}
}
}
return false;
} }