обработка вещательного приемника - PullRequest
0 голосов
/ 24 мая 2010

У меня есть приложение, которое имеет MainActivity (без графического интерфейса .. пожалуйста, просто используйте его :))

теперь это MainActivity, на котором запущен сервис, этот сервис использует sendBroadcast () для связи с MainActivity. теперь, конечно, мне нужно registerReceiver в onResume () MainActivity.

но мне также нужно добавить unregisterReceiver (получатель) в onDestroy () MainActivity.

Проблема в том, что когда я впервые запускаю это приложение, мне нужно, чтобы оно активировало службу, и я не хочу, чтобы пользователь терял фокус, поэтому я нажимаю финиш () после запуска службы. но затем вызывается auto unregisterReceiver (получатель) .. и это не очень хорошо для меня .. я получаю сообщение об ошибке, так как он не может найти ни одного зарегистрированного получателя.

поэтому я исправил это, удалив эту строку ... но я уверен, что она собирается "отомстить" мне в будущем, когда / где у меня могут возникнуть проблемы, если я не буду использовать unregisterReceiver (receive) .. в onDestroy ()

mybe, я должен удалить это (вместо того, чтобы удалить это), чтобы onPause ()?

спасибо,

луч.

1 Ответ

0 голосов
/ 24 мая 2010

Попробуйте вызвать 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");
    }

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...