今天,使用 Android 服务,在我看来,工作方法遇到了一些“不合逻辑”或“不正确” bindService
。我在您内部的应用程序服务中创建的混淆的本质是ExecutorService
发出请求。当我进入应用程序时,服务仍然存在 - 查询在不同的线程中执行,具有一定的周期性(日志证实了这一点)。在 onStart() 方法中,我编写了代码,根据所有手册和教程,我应该可以使用此应用程序访问我之前运行过的服务。但我们所有的建议似乎都很明显。我期待着打电话bindService()
-> 我连接到正在运行的服务。但是不,相反,在第一次尝试时连接没有发生 - 我不明白为什么。我添加了可以运行服务本身的代码,如果之前没有完成的话。所以这部分代码被激活,我再次尝试连接到正在运行的服务。是的,连接是成功的,但是 - 连接滋养了我期望从第一次连接尝试中获得的服务。从我尝试重新创建服务的日志来看,并不会导致它的创建。所有这些都来自日志。在这方面,我想知道 - 为什么第一次尝试连接它没有发生?还是我做错了?
Activity中的片段代码
...
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