我有一个具有MainActivity的应用程序(没有gui ..请与它一起流动:))
现在这个MainActivity运行一个服务,这个服务使用sendBroadcast()来与MainActivity共同运行。 现在我需要在MainActivity的 onResume ()中 registerReceiver 。
但我还需要在MainActivity的 onDestroy ()中添加 unregisterReceiver (接收方)。
问题是:当我第一次启动该应用程序时,我需要它来提升服务,我不希望用户失去焦点,所以我在启动服务后按完成() ..但随后自动调用 unregisterReceiver(接收器)..这对我不好..我得到错误它说它无法找到任何寄存器reciver。
所以我通过删除这一行来修复它...但是我确信它将来会“淹没”我,如果我不会使用unregisterReceiver(接收器)那么我/哪里有问题...在onDestroy()
mybe我应该删除它(而不是删除它)到onPause()?
感谢,
射线。
答案 0 :(得分:0)
尝试在onStart()中调用bindService,在onStop()中调用unbindService(),在onResume()内调用registerReciever(),在onPause()中调用unregisterReceiver()。
您可能会看一下我的工作代码。也许它可以帮助您找到解决方案。
在实际项目中,我评论了以下内容:
bindService(new Intent(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");
}
};