Mon application est tuée à chaque fois qu'elle revient à l'état hors écran. Je récupère toutes les informations que mon application fait, mais je ne peux pas savoir pourquoi elle appelle onDestroy. C'est la première fois que je vois ce comportement dans mes applications.OnDestroy est appelé à chaque fois que l'écran se rallume
Mon activité principale étend tabActivity car elle contient un tabhost. J'ai lu que ça doit l'étendre ou ça va FC. Je ne suis pas sûr si mon problème est lié à cela ?! Oh et il implémente Observer mais cela ne devrait pas poser de problème.
Voici les journaux:
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
Ce qui est fou est qu'il appelle le OnDestroy la plupart du temps après que l'écran se rallume, et parfois il a assez de temps pour le faire avant que l'écran éteint. Mais après que ça recommence, ça fait encore pareil ...
J'espère que quelqu'un a un conseil pour moi ou des informations sur la façon de résoudre ce problème.
Je ne suis pas sûr si cela est important, mais j'utiliser le sdk 2.1 Update1 android pour mon application.
EDIT:
L'application est testé sur un vrai appareil Android.
Voici un code de base avec toutes les lignes inutiles et informations supprimées:
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, je l'ai testé ma demande sans rien initialiser, puis avec seulement étendre l'activité, ou sans mettre en œuvre l'observateur, mais mes changements n'ont eu aucun effet. Chaque fois que je mets mon téléphone en veille, puis je le réveille, onDestroy()
s'appelle ?!
EDIT3:
Ok, j'ai trouvé quelque chose d'intéressant.
premier est ici mon 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>
Dès que je retire le screenOrientation="landscape"
, l'application ne sera pas détruit chaque fois que je me réveille mon appareil. Je l'ai essayé plus de 10 fois, mais plus d'appels à onDestroy()
Donc je pense que je vais devoir mettre cela en code ?! Des conseils ou des morceaux de code?
Cela semble un peu étrange, est-ce dans l'émulateur, et pouvez-vous poster un framework de code skelton qui présente le comportement? – Idistic
Sur l'émulateur, je ne l'ai pas encore essayé. Je reçois ce comportement sur mon vrai téléphone Android donc pas d'émulateur. Qu'est-ce que vous voulez dire avec qui montre le comportement. Je vais poster du code dans les prochaines minutes. – mikepenz
Je veux dire un code qui reproduit fidèlement le problème, parfois les gens mettent en place des extraits qui omettent le vrai problème – Idistic