web-dev-qa-db-ja.com

すでに実行されている場合にサービスが再び実行されるのを防ぐ方法android

ボタンをクリックすると、メソッドstartService(new Intent(currentActivity.this,MyService.class))を使用してサービスを開始しますが、サービスが実行中の場合、このメソッドを呼び出して既に実行中のサービスを実行しないようにします。両方インテントサービスサービスが同じプロジェクトにあり、両方に同じ条件を適用したい。

37
Atul Bhardwaj

サービスは1回しか実行されないため、startService(Intent)を複数回呼び出すことができます。

サービスでonStartCommand()を受け取ります。それを覚えておいてください。

ソース:Context.startService()への複数の呼び出しはネストされないことに注意してください(ただし、それらは複数の対応するonStartCommand()への呼び出しになります)。 Context.stopService()またはstopSelf()が呼び出されると;ただし、サービスはstopSelf(int)メソッドを使用して、開始されたインテントが処理されるまでサービスが停止されないようにすることができます。

で: http://developer.Android.com/reference/Android/app/Service.html トピック:サービスライフサイクル

75
Ion Aalbers

startService()を使用します。サービスの開始はonStartCommand()を呼び出します。サービスがまだ開始されていない場合は、onCreate()を呼び出します。変数を初期化するか、onCreate()でスレッドを開始します。

20
Thijs Limmen

サービスをバインドします。通話を開始するとき:

Intent bindIntent = new Intent(this,ServiceTask.class);
    startService(bindIntent);
    bindService(bindIntent,mConnection,0);

次に、サービスが機能しているかどうかを確認するには、次のような方法を使用します。

    public static boolean isServiceRunning(String serviceClassName){ 
             final ActivityManager activityManager = (ActivityManager)Application.getContext().getSystemService(Context.ACTIVITY_SERVICE);     
             final List<RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);      
           for (RunningServiceInfo runningServiceInfo : services) {         
             if (runningServiceInfo.service.getClassName().equals(serviceClassName)){             
                return true;         
             }     
           }     
         return false; 
        }
7
Samuel

アクティビティからサービスを開始するたびに、AndroidシステムはサービスのonStartCommand()メソッドを呼び出します。サービスがまだ実行されていない場合、システムは最初にonCreate()を呼び出し、次にonStartCommand( )。

つまり、Androidサービスの開始はライフサイクルで1回だけであり、停止するまで実行し続けます。他のクライアントが再び開始する場合は、onStartCommand()メソッドのみが常に呼び出されます。

1
Krrish