【发布时间】:2012-10-30 05:49:35
【问题描述】:
我有一个TestActivity。此活动将在按下Button 时从主要活动开始。
这就是我的测试活动在清单文件中的声明方式。
<activity
android:name="com.example.MyTestActivity"
android:configChanges="keyboard|keyboardHidden"
android:label="MYTESTACtivity"
android:theme="@style/someTheme"
android:windowSoftInputMode="stateHidden|adjustPan" >
</activity>
现在的问题是,一旦显示TestActivity 屏幕,如果我进行方向更改,那么TestActivity 的实例计数将增加 1。如果我再次将其更改为纵向模式,它会增加还有1个。这就是在方向更改期间实例计数不断增加的方式。
无论方向发生什么变化,请告知如何一次只制作一个活动实例。
我也试过添加android:launchMode="SingleTop" 仍然存在同样的问题。
仅供参考,这就是我能够在严格模式下找到实例计数的方式。
01-02 01:39:48.855: E/StrictMode(21992): android.os.StrictMode$InstanceCountViolation: class com.example.MyTestActivity; instances=20; limit=1
【问题讨论】:
-
尝试使用 android:launchMode="singleInstance"
-
android:singleInstance 不推荐使用,因此也不能使用。
-
你有上下文泄漏吗?您可能会在应用程序的其他地方保留对活动中某些内容的引用,这会阻止活动的先前实例被垃圾收集。
-
我不这么认为,我在 layout 和 layout-land-xhdpi 文件夹中有 2 个不同的布局,我也没有使用 android:configChanges 声明我的活动。因此 onCreate() 会随着方向的变化而一次又一次地被调用,并且我的活动实例数正在增加。我也不能声明 android:configChanges 因为那样我也不能使用 onSaveInstanceState 和 onRestoreInstanceState。
-
预期会调用 onCreate()。每次更改方向时,您的活动都会被销毁,然后重新创建,这会导致调用 onCreate()。但是,似乎现有实例没有被破坏,而我所知道的唯一原因就是泄漏。是否可以发布您的活动代码?
标签: android count orientation instance