在開(kāi)發(fā)中會(huì)遇到判斷 App是否是前臺(tái)進(jìn)程褂傀,其實(shí)方法挺多仙辟,比如RunningTask(5.0之前 )鳄梅、UsageStatsManager(5.0之后適用)、RunningProcess(不能有效識(shí)別粟焊,比如三星手機(jī))孙蒙、ActivityLifecycleCallbacks,其中最有效的方法是通過(guò)ActivityLifecycleCallbacks進(jìn)行監(jiān)聽(tīng) 香追,本文只介紹這種。
先了解下ActivityLifecycleCallbacks翅阵,當(dāng)Activity處于各生命周期中時(shí)會(huì)走如下各方法回調(diào)
public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activity, Bundle outState);
void onActivityDestroyed(Activity activity);
}
當(dāng)然首先得在Application注冊(cè)監(jiān)聽(tīng)(無(wú)需做反注冊(cè)操作)
registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks);
因?yàn)楸容^簡(jiǎn)單所以不做過(guò)多說(shuō)明了掷匠,直接上使用方法
首先創(chuàng)建Listener實(shí)現(xiàn)該接口
public class AppStatusTracker implements Application.ActivityLifecycleCallbacks {
private static AppStatusTracker tracker;
private Application application;
private boolean isForground;
private int activeCount;
private long timestamp;
private AppStatusTracker(Application application) {
this.application = application;
this.application.registerActivityLifecycleCallbacks(this);
}
public static void init(Application application) {
tracker = new AppStatusTracker(application);
}
public static AppStatusTracker getInstance() {
if (null == tracker) {
tracker = new AppStatusTracker(new AppContext());
}
return tracker;
}
public boolean isForground() {
return isForground;
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
if (activeCount == 0){
timestamp = System.currentTimeMillis();
}
activeCount++;
}
@Override
public void onActivityResumed(Activity activity) {
isForground = true;
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
activeCount--;
if (activeCount == 0) {
isForground = false;
timestamp = System.currentTimeMillis() - timestamp;
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
}
然后只需在 Application 的 onCreate 中進(jìn)行注冊(cè)
AppStatusTracker.init(this);
OK了讹语,知識(shí)點(diǎn)不多顽决,要了解更多可圍繞 Android5.0 前臺(tái)進(jìn)程去搜索