今日、Android 用サービスを使用すると、「非論理的」または「正しくない」、私の意見では、作業方法に直面しましたbindService
。私があなたの内にあるアプリケーション サービスで作成した混乱の本質はExecutorService
、要求を行います。私がアプリケーションに行ったとき、サービスは生きたままでした - クエリは特定の周期で別々のスレッドで実行されます (ログはこれを確認します)。メソッド onStart() で、すべてのマニュアルとチュートリアルで、このアプリケーションで以前に実行したサービスにアクセスできるようにするコードを書きました。しかし、私たちのすべてのアドバイスは明らかでした。私はその呼び出しを期待していましたbindService()
-> 実行中のサービスに接続できます。しかし、いいえ、代わりに、最初の試行で接続が行われません-理由がわかりません. 以前に実行されていない場合は、サービス自体を実行するコードを追加しました。したがって、コードのこの部分がアクティブになり、サービスを実行しているだけに接続しようとします。そして、はい、接続は成功しましたが、最初の接続試行から得られると期待していたサービスに接続が栄養を与えます。また、サービスを再作成しようとしたログから判断すると、サービスの作成にはつながりません。これはすべてログから得られます。そして、これに関して、私は疑問に思います-なぜそれを接続する最初の試みが起こらないのですか? それとも私は間違っていますか?
アクティビティのフラグメント コード
...
private ServiceConnection serviceConnection = new ServiceConnection(){
public void onServiceConnected(ComponentName name, IBinder service) {
flagServiceConnection = true;
Log.d("StartActivity/serviceConnection", "serviceConnection/onServiceConnected() -> connected");
exService = ((ExService.ExBinder) service).getService();
exService.setFlagBroadcast(true);
exService.getAll();
}
public void onServiceDisconnected(ComponentName name) {
flagServiceConnection = false;
Log.d("StartActivity/serviceConnection", "serviceConnection/onServiceDisconnected() -> disconnected");
}
};
...
public void onStart(){
super.onStart();
bindService(new Intent(this.getApplicationContext(), ExService.class), serviceConnection, 0);
if(!flagServiceConnection){
Log.d("StartActivity", "onStart() -> start service");
this.startService(new Intent(this.getApplicationContext(), ExService.class));
bindService(new Intent(this.getApplicationContext(), ExService.class), serviceConnection, 0);
}
}
ログ
D/StartActivity(5922): onCreate()
D/StartActivity(5922): onStart() -> start service
D/StartActivity/serviceConnection(5922): erviceConnection/onServiceConnected() -> connected
D/-(5922): pront.android.exservice.ExService$Monitor@4056b4c8
D/-(5922): pront.android.exservice.ExService$Monitor@405480e0
D/-(5922): pront.android.exservice.ExService$Monitor@4054ee18
D/ExService(5922): onRebind()
D/ExService(5922): onStartCommand() -> service start