处理广播接收器

时间:2010-05-24 10:38:04

标签: android

我有一个具有MainActivity的应用程序(没有gui ..请与它一起流动:))

现在这个MainActivity运行一个服务,这个服务使用sendBroadcast()来与MainActivity共同运行。 现在我需要在MainActivity的 onResume ()中 registerReceiver

但我还需要在MainActivity的 onDestroy ()中添加 unregisterReceiver (接收方)。

问题是:当我第一次启动该应用程序时,我需要它来提升服务,我不希望用户失去焦点,所以我在启动服务后按完成() ..但随后自动调用 unregisterReceiver(接收器)..这对我不好..我得到错误它说它无法找到任何寄存器reciver。

所以我通过删除这一行来修复它...但是我确信它将来会“淹没”我,如果我不会使用unregisterReceiver(接收器)那么我/哪里有问题...在onDestroy()

mybe我应该删除它(而不是删除它)到onPause()?

感谢,

射线。

1 个答案:

答案 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");
    }

};