Попробуйте вызвать bindService в onStart (), unbindService () в onStop (), registerReciever () в onResume () и unregisterReceiver () в onPause ().
Вы могли бы взглянуть на часть моего рабочего кода. Может быть, это поможет вам найти решение.
В реальном проекте я прокомментировал следующее:
bindService (новое намерение (test1.this, MyService.class), mServiceConnection, Context.BIND_AUTO_CREATE);
unbindService (mServiceConnection);
и все объявления mServiceConnection.
Я сделал это, потому что на самом деле это фоновая служба, запускающаяся во время загрузки системы. В противном случае они не должны комментироваться.
@Override
public void onStart() {
super.onStart();
bindService(new Intent(test1.this, MyService.class), mServiceConnection, Context.BIND_AUTO_CREATE);
Intent serviceIntent = new Intent(this, MyService.class);
getApplicationContext().startService(serviceIntent);
Log.d(TAG, "onStart");
}
@Override
public void onStop() {
super.onStop();
unbindService(mServiceConnection);
}
@Override
public void onResume(){
super.onResume();
registerReceiver(receiver, new IntentFilter(MyService.BROADCAST_ACTION));
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onRecieve");
constantCursor.requery(); // service finished its job, refresh ListView
}
};
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = ((MyService.LocalBinder)service).getService();
Log.d(TAG, "onServiceConnected");
}
@Override
public void onServiceDisconnected(ComponentName name) {
// This is called when the connection with the service has been
// unexpectedly disconnected -- that is, its process crashed.
mService = null;
Log.d(TAG, "onServiceDisconnected");
}
};