每次从屏幕关闭状态返回时,我的应用程序都会被杀死。我获取了我的应用程序执行的所有信息,但无法找到它为什么调用onDestroy的信息。这是我第一次在应用程序中看到这种行为。
我的主要 Activity 扩展了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用于我的应用程序。
编辑:
该应用程序已在真实的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);
}
}
编辑2:
好的,我测试了我的应用程序时没有初始化任何东西,然后只扩展了 Activity ,或者没有实现观察者,但是我的更改没有效果。每次我将手机设置为 sleep 状态,然后将其唤醒时,就会调用
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()
所以我认为我将不得不在代码中设置它?有技巧或代码片段吗?
最佳答案
如果由于方向更改而要停止销毁/创建问题(这是android中的默认设置)并锁定一个方向,则需要添加代码和xml
在您的 Activity 代码中(有关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);
}
关于android - 每次屏幕打开时都会调用onDestroy,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6772988/