onDestroy se llama cada vez que la pantalla continúa

Mi aplicación se mata cada vez que vuelve desde el estado de apagado de pantalla. Busco toda la información que hace mi aplicación, pero no puedo averiguar por qué llama a Destroy. Es la primera vez que veo este comportamiento en mis aplicaciones.

Mi actividad principal se extiende tabActivity porque contiene un tabhost. He leído que tiene que ampliarlo o lo hará FC. No estoy seguro de si mi problema está relacionado con esto? Ah, y implementa Observer, pero esto no debería ser un problema.

Aquí están los registros:

07-21 09:57:53.247: VERBOSE/###(13180): onResume 07-21 09:57:53.267: VERBOSE/###(13180): onPause 07-21 09:57:59.967: VERBOSE/###(13180): onResume 07-21 09:58:00.597: VERBOSE/###(13180): onPause 07-21 09:58:00.597: VERBOSE/###(13180): onDestroy 07-21 09:58:00.637: VERBOSE/###(13180): onCreate 

Lo loco es que llama a onDestroy la mayoría de las veces después de que la pantalla se enciende de nuevo, y a veces tiene tiempo suficiente para hacer esto antes de que la pantalla se apague. Pero después de que continúa, vuelve a hacer lo mismo …

Espero que alguien tenga un consejo para mí o cualquier información sobre cómo resolver este problema.

No estoy seguro de si esto es importante, pero utilizo el sdk android 2.1-update1 para mi aplicación.


EDITAR:

La aplicación se prueba en un dispositivo Android real.

Aquí hay un código básico con todas las líneas innecesarias y la información eliminada:

 package; imports; public class WebLabActivity extends TabActivity implements Observer{ #declerations /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.v("###", "onCreate"); setContentView(R.layout.main); # initialize some basic things } @Override public void onResume() { super.onResume(); Log.v("###", "onResume"); } @Override public void onDestroy() { super.onDestroy(); Log.v("###", "onDestroy"); } @Override public void onRestart() { Log.v("###", "onRestart"); super.onRestart(); } @Override public void onPause() { Log.v("###", "onPause"); super.onPause(); } @Override public void onConfigurationChanged(Configuration newConfig) { Log.v("###", "onConfigurationChanged"); super.onConfigurationChanged(newConfig); } @Override public void update(Observable observable, Object data) { Log.v("###", "notifyManager.getWho() + " made an Update"); } private void initializeSidebarTabhost() { TabSpec 1 = tabHost.newTabSpec("1"); TabSpec 2 = tabHost.newTabSpec("2"); TabSpec 3 = tabHost.newTabSpec("3"); TabSpec 4 = tabHost.newTabSpec("4"); 1.setIndicator("###"); 2.setIndicator("###"); 3.setIndicator("###"); 4.setIndicator("###"); addIntents tabHost.addTab(1); //0 tabHost.addTab(2); //1 tabHost.addTab(3); //2 tabHost.addTab(4); //3 tabHost.getTabWidget().setCurrentTab(2); } } 

EDIT2:

Ok, probé mi aplicación sin inicializar nada, luego con solo extender la actividad, o sin implementar observador, pero mis cambios no tuvieron ningún efecto. Cada vez que configuro mi teléfono para que duerma, lo despierto, se onDestroy() get ?!


EDIT3:

Ok, descubrí algo interesante.

Primero, aquí está mi AndroidManifest.xml

                

Tan pronto como elimine screenOrientation="landscape" , la aplicación no se destruirá cada vez que despierto mi dispositivo. Lo intenté más de 10 veces pero no más llamadas a onDestroy()

¿Entonces creo que tendré que configurar esto en código? ¿Alguna sugerencia o fragmento de código?

Si quieres detener el problema de destruir / crear que es el predeterminado en Android debido a un cambio de orientación y bloquear en una orientación, entonces necesitas agregar código y xml

En su código de actividades (notas sobre el xml)

  // When an android device changes orientation usually the activity is destroyed and recreated with a new // orientation layout. This method, along with a setting in the the manifest for this activity // tells the OS to let us handle it instead. // // This increases performance and gives us greater control over activity creation and destruction for simple // activities. // // Must place this into the AndroidManifest.xml file for this activity in order for this to work properly // android:configChanges="keyboardHidden|orientation" // optionally // android:screenOrientation="landscape" @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } 

Tuve el mismo problema. Desde ActivityA llamé a ActivityB. Cuando cerré ActivityB, esperaba que se mostrara ActivityA pero no fue destruido. Este problema fue causado por los siguientes atributos de ActivityA en AndroidManifest.xml:

 android:excludeFromRecents="true" android:noHistory="true" 

Debido a ellos ActivityA se destruyó después de que ActivityB se inició.

mikepenz, en tu caso si realmente necesitas un android: setorientation = “paisaje” significa, no necesitas quitarlo, solo agrega estos conjunto de atributos android: configchanges = “orientation | Screensize” esto no destruirá tu actividad … hope esto te ayuda