onDestroy вызывается каждый раз, когда на экране происходит
мое приложение убивается каждый раз, когда оно возвращается из состояния выключения экрана. Я получаю всю информацию, которую делает мое приложение, но я не могу узнать, почему он вызывает onDestroy. Это первый раз, когда я вижу такое поведение в своих приложениях.
моя основная деятельность расширяет tabActivity, потому что она содержит tabhost. Я читал, что он должен продлить его, или он будет FC. Я не уверен, что моя проблема связана с этим?! О, и он реализует Observer, но этого не должно быть проблема.
вот журналы:
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
безумие в том, что он вызывает onDestroy больше всего раз после того, как экран снова включается, и иногда у него достаточно времени, чтобы сделать это до того, как экран погаснет. Но после того, как это происходит снова, оно делает то же самое снова...
Я надеюсь, что у кого-то есть подсказка для меня или любая информация о том, как решить эту проблему.
Я не уверен, что это важно, но я использую Android 2.1-update1 sdk для моего приложение.
EDIT:
приложение тестируется на реальном устройстве Android.
вот некоторый базовый код со всеми ненужными строками и информацией:
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:
хорошо, я тестировал свое приложение без инициализации чего-либо, затем только с расширением активности или без реализации наблюдателя, но мои изменения не имели никакого эффекта. Каждый раз, когда я устанавливаю свой телефон спи, а потом разбуди его,onDestroy() вам звонил?!
EDIT3:
хорошо, я узнал кое-что интересное.
сначала вот мой 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>
как только я удалить screenOrientation="landscape", приложение не будет уничтожено каждый раз, когда я просыпаюсь на своем устройстве. Я пробовал это более 10 раз, но больше не звонит onDestroy()
Итак, я думаю, что мне придется установить это в коде?! Любые подсказки или части код?
3 ответов
Если вы хотите остановить уничтожить / создать проблему, которая по умолчанию в android из-за изменения ориентации и блокировки в одной ориентации, то вам нужно добавить код и xml
в вашем коде activites (заметки о 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);
    }
У меня была такая же проблема. Из ActivityA я позвонил ActivityB. Когда я закрыл ActivityB, я ожидал, что ActivityA будет показана, но этого не было-она была уничтожена. Эти проблемы были вызваны следующими атрибутами ActivityA в AndroidManifest.XML-код:
android:excludeFromRecents="true"
android:noHistory="true"
из-за них ActivityA была уничтожена после запуска ActivityB.
mikepenz ,в вашем случае, если вам действительно нужен android:setorientation = "пейзаж" означает, что вам не нужно его удалять, просто добавьте этот набор атрибутов android:configchanges = "ориентация|Screensize" это не уничтожит вашу деятельность... надеюсь, это поможет вам.