1,首先要对自己应用的activity建立一个白名单
2,权限 <uses-permissionandroid:name="android.permission.GET_TASKS"/>
3,
import android.app.Activity; import android.app.ActivityManager; import android.app.Application; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import java.util.List; /** * Created by anye0 on 2016/7/24. */ public class MyApplication extends Application { public static MyApplication instances; private boolean isBackground; @Override public void onCreate() { super.onCreate(); instances = this; listenForForeground(); listenForScreenTurningOff(); } public static MyApplication getInstances() { return instances; } private void listenForForeground() { registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { Log.e("tag", activity.getClass().getSimpleName() + "---onActivityCreated"); } @Override public void onActivityStarted(Activity activity) { Log.e("tag", activity.getClass().getSimpleName() + "---onActivityStarted"); } //... @Override public void onActivityResumed(Activity activity) { Log.e("tag", activity.getClass().getSimpleName() + "---onActivityResumed"); if (isBackground) { notifyForeground(); } } @Override public void onActivityPaused(Activity activity) { Log.e("tag", activity.getClass().getSimpleName() + "---onActivityPaused"); } @Override public void onActivityStopped(Activity activity) { Log.e("tag", activity.getClass().getSimpleName() + "---onActivityStopped"); isApplicationBroughtToBackground(activity); } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityDestroyed(Activity activity) { Log.e("tag", activity.getClass().getSimpleName() + "---onActivityDestroyed"); } }); } private void listenForScreenTurningOff() {//锁屏 IntentFilter screenStateFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { notifyBackground(); } }, screenStateFilter); } private void notifyForeground() { isBackground = false; Log.e("tag", "---重新使用应用"); } private void notifyBackground() { isBackground = true; Log.e("tag", "---后台"); } /** * 判断当前应用程序处于前台还是后台 */ public boolean isApplicationBroughtToBackground(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())) { notifyBackground(); return true; } } return false; } public boolean isBackground() { return isBackground; } }/** * 判断应用在前台还是后台 * * @return */ private synchronized boolean isAppOnForeground() { String processName = getPackageName(); ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); List<ActivityManager.RunningAppProcessInfo> processList = activityManager.getRunningAppProcesses(); if (processList != null && processList.size() > 0) { for (ActivityManager.RunningAppProcessInfo process : processList) { if (process.processName.startsWith(processName)) { boolean isBackground = process.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND && process.importance != RunningAppProcessInfo.IMPORTANCE_VISIBLE; boolean isLockedState = keyguardManager.inKeyguardRestrictedInputMode(); if (isBackground || isLockedState) { return false; } else { // 前台 return true; } } } } return true; }