Checking if an Android application is running in the background

前端 未结 30 3400
无人共我
无人共我 2020-11-21 06:19

By background, I mean none of the application\'s activities are currently visible to the user?

30条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-21 07:17

    If you turn on developer settings "Don't keep actvities" - check only count of created activites is not enough. You must check also isSaveInstanceState. My custom method isApplicationRunning() check is android app is running:

    Here my work code:

    public class AppLifecycleService implements Application.ActivityLifecycleCallbacks {
        private int created;
        private boolean isSaveInstanceState;
        private static AppLifecycleService instance;
    
        private final static String TAG = AppLifecycleService.class.getName();
    
        public static AppLifecycleService getInstance() {
            if (instance == null) {
                instance = new AppLifecycleService();
            }
            return instance;
        }
    
        public static boolean isApplicationRunning() {
            boolean isApplicationRunning = true;
            if (getCountCreatedActvities() == 0 && !isSaveInstanceState()) {
                isApplicationRunning = false;
            }
            return isApplicationRunning;
        }
    
        public static boolean isSaveInstanceState() {
            return AppLifecycleService.getInstance().isSaveInstanceState;
        }
    
        public static int getCountCreatedActvities() {
            return AppLifecycleService.getInstance().created;
        }
    
        private AppLifecycleService() {
        }
    
        @Override
        public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            this.isSaveInstanceState = true;
        }
    
        @Override
        public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
            ++created;
        }
    
        @Override
        public void onActivityDestroyed(Activity activity) {
            --created;
        }
    
        @Override
        public void onActivityResumed(Activity activity) {   }
    
        @Override
        public void onActivityPaused(Activity activity) { }
    
    
        @Override
        public void onActivityStarted(Activity activity) { }
    
        @Override
        public void onActivityStopped(Activity activity) { }        
    
    }
    

提交回复
热议问题