savedinstancestate - onstart android example
onDestroy se llama cada vez que la pantalla se enciende (3)
Si desea detener el problema de destruir / crear que es el predeterminado en Android debido a un cambio de orientación y bloqueo en una orientación, debe 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);
}
Mi aplicación se anula cada vez que vuelve del estado de apagado de pantalla. Obtengo 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 amplía 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, e 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 vuelve a encenderse, y en ocasiones tiene tiempo suficiente para hacerlo antes de que se apague la pantalla. Pero después de que vuelve a hacer, hace lo mismo otra vez ...
Espero que alguien tenga una sugerencia para mí o cualquier información sobre cómo resolver este problema.
No estoy seguro de si esto es importante, pero uso el sdk de 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 e información innecesarias eliminadas:
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, he probado mi aplicación sin inicializar nada, luego solo extendiendo la actividad o sin implementar el observador, pero mis cambios no tuvieron efecto. Cada vez que configuro mi teléfono para que se ponga en reposo, luego lo onDestroy()
, onDestroy()
se ha llamado a onDestroy()
?
EDIT3:
Ok, me enteré de algo interesante.
Primero aquí está mi AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tundem.###"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".###" android:label="@string/app_name" android:screenOrientation="landscape" android:theme="@android:style/Theme.Light.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Tan pronto como elimine el 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()
¡¿Así que creo que tendré que poner esto en código ?! ¿Algún consejo o código?
Tuve el mismo problema. Desde ActivityA llamé ActivityB. Cuando cerré ActivityB, esperaba que se mostrara ActivityA pero no fue así, 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 se iniciara ActivityB.
mikepenz, en su caso, si realmente necesita un android: setorientation = "landscape" significa que no necesita eliminarlo, solo agregue este conjunto de atributos android: configchanges = "orientación | Tamaño de pantalla" esto no destruirá su actividad ... espero esto te ayuda