В моем приложении я использую связанные сервисы.Однако во время выполнения кода я запускаю сервис и связываюсь с ним (метод OnBind () работает), но впоследствии OnStartService () никогда не вызывается, и мой сервис равен нулю.
Вот мой сервисный код:
public class MyService extends Service{
boolean toExit = false;
boolean isThreatDetectionOn;
boolean isDanger = false;
int counter;
class MyServiceBinder extends Binder {
public MyService getService()
{
return MyService.this;
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
Log.i("Bind", "thats good");
return null;
}
@Override
public void onDestroy() {
stop();
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
isThreatDetectionOn = true;
new Thread(new Runnable() {
@Override
public void run() {
start();
}
}).start();
return START_STICKY;
}
}
start () и stop () - это метод, который запускается в сервисе и начинает генерировать случайные числа и прекращает генерировать случайные числа соответственно.
Вот код привязки / отмены привязки для службы:
private MyService ListeningService;
private boolean isServiceBound = false;
private ServiceConnection serviceConnection;
bindService = (Button) findViewById(R.id.button7);
bindService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
Log.i("Great","Button Bind Clicked");
if(serviceConnection == null)
{
Log.i("Great","Service Connection is Null");
serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
MyService.MyServiceBinder myBinder = (MyService.MyServiceBinder)iBinder;
listeningService = myBinder.getService();
isServiceBound = true;
Log.i("Yes", "Service Connected");
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
isServiceBound = false;
Log.i("No", "Service DisConnected");
}
};
}
bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
}
});
unbindService = (Button) findViewById(R.id.button8);
unbindService.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isServiceBound)
{
unbindService(serviceConnection);
isServiceBound = false;
Log.i("No", "Service DisConnected");
}
}
});
Даже после вызова onBind () (в журналах говорится «Bind: thats good») isServiceBound по-прежнему остается ложнымкогда это должно теперь стать правдой, потому что сервис теперь подключен.