42

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

4

5 に答える 5

88

サービスは 1 回だけ実行されるため、startService(Intent)複数回呼び出すことができます。

をサービスでお届けonStartCommand()します。ですから、それを覚えておいてください。

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

トピック: サービスのライフサイクルに関するhttp://developer.android.com/reference/android/app/Service.html

于 2012-05-24T14:28:48.667 に答える
7

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

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; 
        }
于 2012-05-24T14:31:26.653 に答える
3

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

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

于 2017-11-15T06:07:15.013 に答える