检查服务是否正在运行时,IntentService返回False

时间:2015-05-11 12:13:50

标签: android intentservice android-intentservice

我正在使用IntentService来呼叫网络服务。

我如何致电启动意向服务:

 if (isMyConServiceRunning(TaskService.class,context) == false) {
            Log.d(TAG,"STARTING TaskService");
            context.startService(TasksIntentUploadDownload);
        }

isMyConServiceRunning方法:

 private static boolean isMyConServiceRunning(Class<?> serviceClass,Context context) 
    {
        try {
            ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
            for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
                if (serviceClass.getName().toLowerCase(Locale.ENGLISH).contains(service.service.getClassName().toLowerCase(Locale.ENGLISH))) {
                    return true;
                }
            }
        }
        catch(Exception e)
        {}
        return false;
    }

isMyConServiceRunning始终返回false(服务未运行),因此服务正在多次启动但我注意到当我覆盖方法OnStartCommand并放置webservice调用时在OnStartCommand而不是OnHandleIntent并且OnStartCommand返回START_STICKY,然后isMyConServiceRunning会识别该服务正在运行。

OnStartCommand中运行任务是不是很糟糕?

如果是,我如何修复多次调用以运行IntentService

1 个答案:

答案 0 :(得分:0)

更好的方法是:

在您的服务类中:

private void sendMessageStart() {

        Intent intent = new Intent("Service-Started");
        intent.putExtra("message", "This is my message!");
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

    }
    private void sendMessageStop() {

        Intent intent = new Intent("Service-Stopped");
        intent.putExtra("message", "This is my message!");
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    }

在您想要检查服务是否正在运行的类中:

private BroadcastReceiver mMessageReceiverStart = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Get extra data included in the Intent
            String message = intent.getStringExtra("message");

        }
    };
    private BroadcastReceiver mMessageReceiverStop = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Get extra data included in the Intent
            String message = intent.getStringExtra("message");


            } 
        } 
    };