通常、Androidサービスを作成するときにonCreateメソッドを実装しますが、最後のプロジェクトではこれが機能しません。私は実装しようとしましたonStartCommandが、これはうまくいくようです。
問題は、どのメソッドが必要なサービスを実装する必要があるかです。どのメソッドを実装する必要がありますか?onCreate、onStartCommandまたはその両方?そして、それぞれの役割は何ですか?
通常、Androidサービスを作成するときにonCreateメソッドを実装しますが、最後のプロジェクトではこれが機能しません。私は実装しようとしましたonStartCommandが、これはうまくいくようです。
問題は、どのメソッドが必要なサービスを実装する必要があるかです。どのメソッドを実装する必要がありますか?onCreate、onStartCommandまたはその両方?そして、それぞれの役割は何ですか?
回答:
onCreate()Serviceオブジェクトがインスタンス化されるとき(つまり、サービスが作成されるとき)に呼び出されます。このメソッドでは、1回だけ実行する必要があることを実行する必要があります(つまり、いくつかの変数を初期化するなど)。インスタンス化されたオブジェクトごとに1onCreate()回だけ呼び出されます。
onCreate()実際に何かを1回だけ初期化する必要がある場合にのみ、実装する必要があります。
onStartCommand()クライアントがを使用してサービスを開始するたびに呼び出されますstartService(Intent intent)。つまり、onStartCommand()複数回呼び出される可能性があります。このメソッドでは、クライアントがサービスから何かを要求するたびに必要なことを行う必要があります。これは、サービスの機能と、クライアントとの通信方法(およびその逆)に大きく依存します。
実装しないと、クライアントが渡すonStartCommand()から情報を取得できず、サービスが有用な作業を行えない可能性があります。IntentonStartCommand()
startService()と、サービスが実行されていない場合、Androidはサービスクラスのインスタンス(これはサービスオブジェクトです)を作成し、onCreate()そのオブジェクトを呼び出します。次にonStartCommand()、そのオブジェクトを呼び出します。しばらくしてから再度を呼び出したstartService()場合、サービスがまだ実行中であれば、Androidは新しいサービスオブジェクトを作成しません。代わりonStartCommand()に、既存のサービスオブジェクトを呼び出すだけです。それは明らかですか?
サービスはアクティビティと同じように動作します
associateサービスで一度やりたいことは何でもonCreate初期化のようになります
そして、serviceがstartServiceを使用して呼び出されるときはいつでも。onStartCommand呼び出されます。実行するアクションを渡すことができます。音楽プレーヤーのように、アクションの使用、再生、一時停止、停止ができます
そして、あなたはoperation in serviceアクションを送信してそれを受け取ることで何かをしますonStartCommand
onCreate コンストラクタのように動作します。
簡単に編集
onCreate()唯一あなたが最初に起動したときのためのコールServiceに対しonStartCommand()コールは、あなたが呼び出す毎回startService再び。再生、停止、音楽の一時停止などのアクションを設定できます。
public void onStartCommand()
{
if(intent.getAction.equals("any.play")
{
//play song
}
else if(intent.getAction.equals("any.stop")
{}
}
onCreate常に関係なく呼び出されます