ボタンをクリックすると、メソッドを使用してサービスを開始したいのですが、サービスが実行されている場合は、既に実行されているサービスをstartService(new Intent(currentActivity.this,MyService.class))
実行しないようにこのメソッドを呼び出したくありません。プロジェクトと両方に同じ条件を適用したい。
5 に答える
サービスは 1 回だけ実行されるため、startService(Intent)
複数回呼び出すことができます。
をサービスでお届けonStartCommand()
します。ですから、それを覚えておいてください。
ソース: への複数の呼び出しContext.startService()
は入れ子にならないことに注意してください (ただし、対応する への複数の呼び出しが発生しますonStartCommand()
)。そのため、サービスが何回開始されても、サービスは 1 回停止されるContext.stopService()
かstopSelf()
、呼び出されます。ただし、サービスはそのstopSelf(int)
メソッドを使用して、開始されたインテントが処理されるまでサービスが停止されないようにすることができます。
トピック: サービスのライフサイクルに関するhttp://developer.android.com/reference/android/app/Service.html
サービスをバインドします。通話開始時:
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;
}
任意のアクティビティから任意のサービスを開始するたびに、Android システムはサービスの onStartCommand() メソッドを呼び出します。サービスがまだ実行されていない場合、システムは最初に onCreate() を呼び出し、次に onStartCommand() を呼び出します。
つまり、Android サービスの開始はそのライフサイクルで 1 回だけであり、停止するまで実行し続けるということです。他のクライアントが再度開始したい場合は、onStartCommand() メソッドのみが常に呼び出されます。