Android BroadCastReceiver обновляет все действия - PullRequest
2 голосов
/ 18 января 2012

У меня проблема с использованием BroadCastreceiver для обновления действий в моем приложении.Я использую сервис, который выполняет некоторые вычисления, и в методе onDestroy() я делаю это:

@Override
public void onDestroy(){        
    super.onDestroy();

    Intent intent = new Intent("finish");
    this.sendBroadcast(intent);
}

и в своей деятельности я делаю это:

receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals("finish")) {
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

                 TabGroupActivity parentActivity = (TabGroupActivity)getParent();
                 Intent previewMessage = new Intent(Tutorial.this, Tutorial.class);
                 parentActivity.startChildActivity("Tutorial", previewMessage);

                 progressBar.setVisibility(View.GONE);
                 sync.setImageResource(R.drawable.sync_icon2);

                 final SharedPreferences isLogged = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                 SharedPreferences.Editor editor = isLogged.edit();
                 editor.putBoolean("getProgBar", false);
                 editor.commit();
            }               
        }
    };
    registerReceiver(receiver, new IntentFilter("finish"));

У меня есть эта функция во всех моих действиях, и проблема в том, что если я изменю 2-3 из них до остановки моей службы, после этого я могу видеть в своих журналах LogCat другие действия, которые также имеют эту функцию, но я неВ настоящее время на этих мероприятиях.Они просто где-то в стеке активности.Но вещь, которую я не могу понять, это перезагрузить их (даже если я не вижу это визуально) и как предотвратить подобные проблемы.Мне нужно обновить только активность, в которой я нахожусь.

Спасибо!

1 Ответ

3 голосов
/ 18 января 2012

Просто добавьте это к своей деятельности.Вы должны отменить регистрацию вашего broadcastreceiver и зарегистрировать его снова в вашем onResume() следующим образом:

    @Override
public void onPause(){
    super.onPause();
    YourActivity.this.unregisterReceiver(receiver);
}
@Override
public void onResume(){
    super.onResume();
    IntentFilter intentFilter = new IntentFilter("com.example.MyService");
    YourActivity.this.registerReceiver(receiver, intentFilter);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...