1.实现ActivityLifecycleCallbacks接口,这里考虑了应用遇到异常重启的情况,
resetVariables()方法可以重置状态。
package com.sohu.newsclient;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
/**
* 用于判断App是否在后台
* Created by kriszhang on 16/1/4.
*/
public class NewsLifecycleHandler implements Application.ActivityLifecycleCallbacks {
// I use four separate variables here. You can, of course, just use two and
// increment/decrement them instead of using four and incrementing them all.
private static int resumed;
private static int paused;
private static int started;
private static int stopped;
public NewsLifecycleHandler(){
resetVariables();
}
public void resetVariables(){
resumed=0;
paused=0;
started=0;
stopped=0;
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
++resumed;
}
@Override
public void onActivityPaused(Activity activity) {
++paused;
android.util.Log.w("test", "application is in foreground: " + (resumed > paused));
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityStarted(Activity activity) {
++started;
}
@Override
public void onActivityStopped(Activity activity) {
++stopped;
android.util.Log.w("test", "application is visible: " + (started > stopped));
}
// If you want a static function you can use to check if your application is
// foreground/background, you can use the following:
public static boolean isApplicationVisible() {
return started > stopped;
}
public static boolean isApplicationInForeground() {
return resumed > paused;
}
public static boolean isApplicationInBackground(){
return started==stopped;
}
}
2.然后再自定义Application中
registerActivityLifecycleCallbacks(new NewsLifecycleHandler());
</pre><pre code_snippet_id="1555966" snippet_file_name="blog_20160113_5_6266074" name="code" class="java">3.在你想要判断的地方,比如home键或锁屏的时候,延迟一两分钟再去调用<pre name="code" class="java">isApplicationInBackground()
判断应用是否处于后台/前台,延迟判断是为了防止用户在很快的时间里切回前台继续使用,我们就曾经给某一厂商坐过一个OEM版,要求后台不允许驻留进程和服务。