2012-01-18 5 views
1

BroadCastreceiverを使用してアプリケーションでアクティビティをリフレッシュする際に問題があります。私はいくつかの計算を行っているサービスを使用していますし、onDestroy()方法で、私はこれをやっている:Android BroadCastReceiverはすべてのアクティビティをリフレッシュします

@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のログにその機能を持つ他の活動のログが表示されますが、私は現在これらの活動には参加していません。それらはアクティビティスタックのどこかにあります。しかし、私が理解できないことは、(たとえ視覚的に見ることができないとしても)それらを再読み込みし、この種の問題を防ぐ方法です。私は自分が行っている活動だけをリフレッシュする必要があります。

ありがとう!

答えて

2

これらをあなたのアクティビティに追加するだけです。 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); 
} 
関連する問題