0

我有一个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
4

4 回答 4

0

onCreate() 调用是预期的。每次更改方向时,您的活动都会被销毁,然后重新创建,这会导致调用 onCreate()。但是,似乎现有实例没有被破坏,而我所知道的唯一原因就是泄漏。一个常见的原因是当 Activity 被销毁时没有取消绑定位图。

于 2012-10-31T12:02:27.287 回答
0

我决定将我的评论移至答案并扩展它,希望其他新人发现这篇文章不会不经进一步思考就接受这个作为解决方案:

android:configChanges:orientation|screensize

Android 旨在销毁和重新创建您的配置更改活动,这是有充分理由的。通过将其添加到清单中,您正在做的是说“我明白我在做什么。我不希望 Android 以它设计的方式运行,我将处理所有后果。

在某些情况下,这是正确的解决方案,但在大多数情况下,这是错误的解决方案,而且远非“我的问题已解决”,事实上,您的问题可能才刚刚开始,因为您必须编写更多代码来完成 Android 会做的事情自动地。更多代码 = 更多错误 = 更低的可维护性。

OP 没有提供足够的细节来提供准确的答案,但是,一般正确的答案是了解 Activity 生命周期(即 Android 的设计工作方式)并考虑它如何应用于您的应用程序以及如何处理各种回调. 特别是,了解 onCreate()、onStart() 和 onResume() 以及 onPause() 和 onStop() 之间的区别是关键。例如,在 onCreate() 中放置大量代码是初学者常见的错误。我见过几乎所有重要代码都在 onCreate() 中完成的应用程序,但它并不漂亮。开发人员第一次按下主页按钮,然后返回到他们的应用程序并想知道为什么它不能正常工作。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Yddl 在这里给出了一个很好的解释:

为什么不总是使用 android:configChanges="keyboardHidden|orientation"?

如果您想投票,请投票给他,因为我所做的只是参考他的回复。

于 2012-10-30T06:34:42.880 回答
-2

默认情况下,当屏幕方向在运行时发生变化(用户旋转了设备)时,Activity 会关闭并重新启动。为了防止这种情况,请在您的清单中添加以下内容。

android:configChanges="keyboardHidden|orientation"

因此,您的清单将如下所示。

<activity
    android:name="com.example.MyTestActivity"
    android:configChanges="keyboard|keyboardHidden"
    android:label="MYTESTACtivity"
    android:theme="@style/someTheme"
    android:windowSoftInputMode="stateHidden|adjustPan" 
    android:configChanges="keyboardHidden|orientation">
</activity>

有关更多信息,请查看

于 2012-10-30T06:02:37.757 回答
-3

尝试添加这个:

<activity
    android:name="com.example.MyTestActivity"
    android:configChanges="keyboard|keyboardHidden|orientation"
   ...../>

在迎新活动期间,您的活动不会重新开始。

于 2012-10-30T06:07:27.037 回答