Ich habe eine TabActivity MyTabActivity mit mehreren Tabs genannt, die ich diesen Code erstellen mit:TabActivity Kind Aktivität mit BroadcastReceiver am Leben bleibt im Hintergrund
public class MyTabActivity extends TabActivity {
public void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.my_tabs);
tabHost = (TabHost)findViewById(android.R.id.tabhost);
tabHost.getTabWidget().setDividerDrawable(R.drawable.tab_divider);
Intent intent = new Intent().setClass(this, MyTab1.class);
setupTab(new TextView(this), "Tab1", intent);
intent = new Intent().setClass(this, MyTab2.class);
setupTab(new TextView(this), "Tab2", intent);
intent = new Intent().setClass(this, MyTab3.class);
setupTab(new TextView(this), "Tab3", intent);
}
private void setupTab(final View view, final String tag, Intent intent) {
View tabview = createTabView(tabHost.getContext(), tag);
TabHost.TabSpec setContent = tabHost.newTabSpec(tag).setIndicator(tabview).setContent(intent);
tabHost.addTab(setContent);
}
private static View createTabView(final Context context, final String text) {
View view = LayoutInflater.from(context).inflate(R.layout.tabs_bg, null);
TextView tv = (TextView) view.findViewById(R.id.tabsText);
tv.setText(text);
return view;
}
}
Eine der Aktivitäten auf einem Register (MyTab2) Register einen BroadcastReceiver, so dass die Registerkarte bei einem bestimmten Ereignis die angezeigten Daten aktualisiert. Ich werde den BroadcastReceiver in onPause nicht abmelden, da ich möchte, dass sich diese Aktivität selbst dann aktualisiert, wenn sie gerade nicht im Vordergrund ist.
public class MyTab2 extends Activity {
// listener to receive broadcasts from activities that change
// data that this activity needs to refresh on the view
protected class MyListener extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("myapp.REFLECT__CHANGES")) {
//request new data from the server
refreshData();
}
}
}
protected void onResume() {
// if listener is not registered yet, register it
// normally we would unregister the listener onPause, but we want
// the listener to fire even if the activity is not in front
if (!listenerIsRegistered) {
registerReceiver(listener, new IntentFilter("myapp.REFLECT_CHANGES"));
listenerIsRegistered = true;
}
super.onResume();
}
Mein Problem ist, dass ich, dass selbst bin zu finden, nachdem die Aktivität zu sichern, die die Anzeige von MyTabActivity voraus und startete MyTabActivity ein zweites Mal, dass die Instanz von MyTab2, die auf dem ersten Eingang erstellt wurden in MyTabActivity scheint immer noch aktiv zu sein. Wenn ich das Ereignis ausstrahle, das die Registerkarte zum Aktualisieren der Daten auslöst, sind sowohl die alte Instanz von MyTab2 als auch die neue Instanz von MyTab2 aktualisiert, da beide die Übertragung empfangen. Meine Frage ist, wie kann ich alle untergeordneten Aktivitäten der TabActivity töten, wenn ich die TabActivity zurücksetze?
Sind die alten Instanzen von untergeordneten Aktivitäten vorhanden, weil ich den BroadcastReceiver nicht abmelde, wenn die Aktivität die Front verlässt?
Wie Sie sich vorstellen können, wird dieses Problem bei jedem folgenden Start einer MyTabActivity behoben.
Intent.FLAG_ACTIVITY_CLEAR_TOP, diese Anweisung löscht die oberste Aktivität, die dem Stack hinzugefügt wird. und danach wird onCreate() aufgerufen. Dies ist in meinem Fall passiert. –