Использование статических переменных, указывающих на компоненты пользовательского интерфейса (например, TabHost
), может привести к утечкам памяти. Не делай этого. Вместо этого зарегистрируйте BroadcastReceiver
в TabActivity
, чтобы добавить новые вкладки. Таким образом, вместо изменения статической переменной вы отправляете широковещательную рассылку (Context#sendBroadcast(Intent)
), чтобы сообщить активности вкладок, что вы хотите новую вкладку.
Кроме того, убедитесь, что вы сохранили состояние TabActivity
, чтобы вы могли восстановить его, если ОС Android по какой-то причине разрушает вашу деятельность. Я рекомендую использовать onRetainNonConfigurationInstance
... примерно так:
private State mState;
public void onCreate(Bundle b){
// somewhere in onCreate
mState = (State) getLastNonConfigurationInstance();
if( mState == null ){
mState = new State();
} else {
for(TabSpec tab : mState.tabs){
//add them to the tab host
}
}
}
@Override
public Object onRetainNonConfigurationInstance() {
return mState;
}
private static class State{
List<TabSpec> tabs;
// more stuff that you want to save
}