通常、Androidサービスを作成するときにonCreate
メソッドを実装しますが、最後のプロジェクトではこれが機能しません。私は実装しようとしましたonStartCommand
が、これはうまくいくようです。
問題は、どのメソッドが必要なサービスを実装する必要があるかです。どのメソッドを実装する必要がありますか?onCreate
、onStartCommand
またはその両方?そして、それぞれの役割は何ですか?
通常、Androidサービスを作成するときにonCreate
メソッドを実装しますが、最後のプロジェクトではこれが機能しません。私は実装しようとしましたonStartCommand
が、これはうまくいくようです。
問題は、どのメソッドが必要なサービスを実装する必要があるかです。どのメソッドを実装する必要がありますか?onCreate
、onStartCommand
またはその両方?そして、それぞれの役割は何ですか?
回答:
onCreate()
Service
オブジェクトがインスタンス化されるとき(つまり、サービスが作成されるとき)に呼び出されます。このメソッドでは、1回だけ実行する必要があることを実行する必要があります(つまり、いくつかの変数を初期化するなど)。インスタンス化されたオブジェクトごとに1onCreate()
回だけ呼び出されます。
onCreate()
実際に何かを1回だけ初期化する必要がある場合にのみ、実装する必要があります。
onStartCommand()
クライアントがを使用してサービスを開始するたびに呼び出されますstartService(Intent intent)
。つまり、onStartCommand()
複数回呼び出される可能性があります。このメソッドでは、クライアントがサービスから何かを要求するたびに必要なことを行う必要があります。これは、サービスの機能と、クライアントとの通信方法(およびその逆)に大きく依存します。
実装しないと、クライアントが渡すonStartCommand()
から情報を取得できず、サービスが有用な作業を行えない可能性があります。Intent
onStartCommand()
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
常に関係なく呼び出されます