web-dev-qa-db-ja.com

Androidサービスを開始するためのonCreateまたはonStartCommand

通常、Androidサービスを作成するときにonCreateメソッドを実装しますが、最後のプロジェクトでは機能しません。 onStartCommandを実装しようとしましたが、これはうまくいくようです。

問題は、サービスを実装する必要があるとき、どのメソッドが必要かということです。どのメソッドを実装する必要がありますか? onCreateonStartCommand、またはその両方?そして、それぞれの役割は何ですか?

88
GVillani82

onCreate()は、Serviceオブジェクトがインスタンス化されると呼び出されます(つまり、サービスが作成済みの場合)。このメソッドでは、一度だけ行う必要のあること(つまり、いくつかの変数を初期化するなど)を行う必要があります。 onCreate()は一度しか呼び出されませんインスタンス化されたオブジェクトごと

実際に何かを初期化したい/必要な場合にのみ、onCreate()を実装する必要があります一度だけ

onStartCommand()が呼び出される毎回クライアントはstartService(Intent intent)を使用してサービスを開始します。これは、onStartCommand()が複数回呼び出されることを意味します。このメソッドで必要なことを行う必要があります毎回クライアントがサービスから何かを要求します。これは、サービスの機能と、クライアントとの通信方法(およびその逆)に大きく依存します。

onStartCommand()を実装しない場合、クライアントがonStartCommand()に渡すIntentから情報を取得できず、サービスが有用な機能を実行できない可能性があります。作業。

170
David Wasser

サービスはアクティビティと同じように振る舞いますサービスで一度associateにしたいことは何でもonCreateに初期化のようになります

そして、servicestartServiceを使用して呼び出されるたびに。 onStartCommandが呼び出されます。実行するアクションを渡すことができます。音楽プレーヤーのように、アクションを使用して再生、一時停止、停止することができます

そして、onStartCommandでアクションを送信して受信することにより、operation in serviceを実行します

onCreateは、コンストラクターのように機能します。

簡単に編集

onCreate()は、Serviceを初めて起動するときにのみ呼び出しますが、onStartCommand()は、startServiceを再度呼び出すたびに呼び出します。音楽の再生、停止、一時停止などのアクションを設定できます。

public void onStartCommand()
{
     if(intent.getAction.equals("any.play")
     {
        //play song
     }
     else if(intent.getAction.equals("any.stop")
     {}
}
10
Xar E Ahmer