サービスが実行されているかどうかを判断


バックグラウンド常駐サービスは、サービスが稼働しているか否かを判断する必要がある場合がある.このためにツールクラスにカプセル化する.2つの方法があります.
  • Android SDK APIを使用し、コードは以下の通り:
  •     /**
         *   Service      
         *
         * @param context        
         * @param serviceName Service    
         * @return true       ,false       
         */
        public static boolean isServiceRunning(Context context, String serviceName) {
            ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            List<ActivityManager.RunningServiceInfo> serviceInfoList = manager.getRunningServices(200);
            if (serviceInfoList.size() <= 0) {
                return false;
            }
            for (ActivityManager.RunningServiceInfo info : serviceInfoList) {
                if (info.service.getClassName().equals(serviceName)) {
                    return true;
                }
            }
            return false;
        }
    
  • はクラスメンバー変数を用いる、public staticメソッドを外部に提供する.コードは次の
  • です.
    //  onCreate()    , onStartCommand()     
    public class TestService extends Service{
    	private volatile static TestService service;
        @Override
        public void onCreate() {
            super.onCreate();
    		//service = this;//    
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            super.onStartCommand(intent, flags, startId);
            //service = this;//        
            return START_STICKY;
        }
        
        @Override
        public void onDestroy() {
            super.onDestroy();
            service = null;//       ,    null
        } 
        
        /**
         *       
         *
         * @return true:   
         */
        public static boolean isServiceRunning() {
            return service != null;
        }
    }