美文网首页Android共享
Android判断前台进程的有效方法

Android判断前台进程的有效方法

作者: CLBAdai | 来源:发表于2018-03-01 11:36 被阅读0次

    判断Android本应用是否在前台的最有效方法

    Android SDK14也就是4.0中加入了ActivityLifecycleCallbacks,我们可以通过这个CallBack拿到所有Activity 里面的生命周期回调。

    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);
        }
    

    了解了这个 我们就可以写一个实现类。

    public class MyLifecycleHandler implements Application.ActivityLifecycleCallbacks {
        private static int resumed;
        private static int paused;
        private static int started;
        private static int stopped;
    
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        }
    
        @Override
        public void onActivityStarted(Activity activity) {
            ++started;
        }
    
        @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 onActivityStopped(Activity activity) {
            ++stopped;
            android.util.Log.w("test", "application is visible: " + (started > stopped));
        }
    
        @Override
        public void onActivityDestroyed(Activity activity) {
        }
    
        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
        }
    
        public static boolean isApplicationVisible() {
            return started > stopped;
        }
    
        public static boolean isApplicationInForeground() {
        // 当所有 Activity 的状态中处于 resumed 的大于 paused 状态的,即可认为有Activity处于前台状态中 
            return resumed > paused;
        }
    

    然后在自己定义的全局Application中的onCreate()方法中注册

      registerActivityLifecycleCallbacks(new MyLifecycleHandler());
    

    注册成功后,调用isApplicationInForeground()方法判断是否在前台

        /***
         * 判断应用是否在前台
         * @return
         */
        public boolean isAppOnForeground() {
          return  MyLifecycleHandler.isApplicationInForeground();
        }
    

    相关文章

      网友评论

        本文标题:Android判断前台进程的有效方法

        本文链接:https://www.haomeiwen.com/subject/wjlgxftx.html