Android App如何判斷應用是否在前臺還是處於後臺
阿新 • • 發佈:2019-02-16
1.實現ActivityLifecycleCallbacks介面,這裡考慮了應用遇到異常重啟的情況,
resetVariables()方法可以重置狀態。
2.然後再自定義Application中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; } }
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版,要求後臺不允許駐留程序和服務。