Android BroadCastReceiver刷新所有活动

时间:2012-01-18 13:25:22

标签: android broadcastreceiver

使用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 个答案:

答案 0 :(得分:3)

只需将这些添加到您的活动中即可。您必须取消注册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);
}