//當前應用是否處於前臺
private boolean isForeground(Context context) {
if (context != null) {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> processes = activityManager.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo: processes) {
if (processInfo.processName.equals(context.getPackageName())) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
}
}
return false;
}
可以根據importance的不同來判斷前臺或後臺
RunningAppProcessInfo 裏面的常量IMOPORTANCE就是上面所說的前臺後臺,其實IMOPORTANCE是表示這個app進程的重要性,因爲系統回收時候,會根據IMOPORTANCE來回收進程的。具體可以去看文檔。。
- public static final int IMPORTANCE_BACKGROUND = 400//後臺
- public static final int IMPORTANCE_EMPTY = 500//空進程
- public static final int IMPORTANCE_FOREGROUND = 100//在屏幕最前端、可獲取到焦點 可理解爲Activity生命週期的OnResume();
- public static final int IMPORTANCE_SERVICE = 300//在服務中
- public static final int IMPORTANCE_VISIBLE = 200//在屏幕前端、獲取不到焦點可理解爲Activity生命週期的OnStart();
但上面的方法有的機型不支持,下面這個方法還是比較靠譜的,但需要一個權限
< uses-permission android:name =“android.permission.GET_TASKS” />
//當前應用是否處於前臺
private boolean isForeground(Context context) {
if (context != null) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
String currentPackageName = cn.getPackageName();
if (!TextUtils.isEmpty(currentPackageName) && currentPackageName.equals(context.getPackageName())) {
return true;
}
return false;
}
return false;
}
版本4.0以上,可以使用ActivityLifecycle
if (Build.VERSION.SDK_INT >= 14) {
lifecycle = new SimpleActivityLifecycle();
registerActivityLifecycleCallbacks(lifecycle);
public class SimpleActivityLifecycle implements Application.ActivityLifecycleCallbacks {
private boolean isForeground = false;//應用是否處於前端
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
isForeground = true;
}
@Override
public void onActivityPaused(Activity activity) {
isForeground = false;
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
public boolean isForeground() {
return isForeground;
}
}