【问题标题】:understanding why android activities are getting created in this scenario了解为什么在这种情况下会创建 android 活动
【发布时间】:2012-09-03 22:09:31
【问题描述】:

我有一个执行此操作的退出方法:

public void quitFinalize(ServicedActivity actCtx)
{   
    for (ServicedActivity act : mRunningActivities)
        launchActivity(actCtx, new Intent(mAppCtx, act.getClass()).setAction("--"));
}

检查 mRunningActivities 是否正常。它包含我的任务中已创建但未销毁的所有活动。所有活动都继承自:

public class ServicedActivity extends FragmentActivity implements OnClickListener
{
    ...

    @Override
    protected void onNewIntent(Intent intent) 
    {
        super.onNewIntent(intent);

        if (/*Intent.ACTION_SCREEN_OFF*/"--".equals(intent.getAction()))            // used for quitting the game
        {
            finish();
        }
    }

        ...
}

我注意到对于 Set 中的 2 个活动,该机制运行良好。然而,对于 3 个 Activity,Android 4.0.3 决定它应该启动(创建)Set 中的一个 Activity 的另一个实例(它似乎特别喜欢启动一个特定的 Activity,而不仅仅是任何一个)。然后他们完成了所有活动(因此 4 个被破坏的活动而不是原来的 3 个)

我确定不是我无意中创建了该活动 - 我的所有 launchActivity 逻辑都通过将 FLAG_ACTIVITY_REORDER_TO_FRONT 标志附加到 Intent 的方法进行过滤,因此我不能以同一 Activity 类的两个实例结束。一定是操作系统重新创建了它。

还尝试不使用 'android:launchMode="singleTop"' 清单文件属性 - 对于应用程序中的所有活动都是如此。一样的。

这里发生了什么?上面的 onNewIntent() 方法按预期被命中了 3 次,但在中间,Android 会创建一个新的 Activity,然后也立即终止它。

谢谢


【问题讨论】:

标签: android android-activity activity-lifecycle


【解决方案1】:

我已经错误地克服了这个问题,似乎: 文档提到活动将在各种事件(例如配置更改)上被销毁/重新创建。所以我想从操作系统中窃取对所有可能的配置更改的控制;现在 AndroidManifest.xml 看起来像

<activity android:name=".ui.MainMenu" android:launchMode="singleTop" android:screenOrientation="reverseLandscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
   android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|fontScale"   />

... etc, same for all activities

现在,docs 还声明:

public void onConfigurationChanged (Configuration newConfig) 因为: API 级别 1

当设备配置发生变化时由系统调用,而您的 活动正在运行。请注意,只有在您有 您想要处理的选定配置 清单中的 configChanges 属性。如果有任何配置更改 发生未被该属性选择报告的情况,则 系统将停止并重新启动活动,而不是报告它 (让它以新配置启动)。

我确实在我的活动中重写了这个方法,而且它很少被调用(比如,20 次中可能有 1 次)。但是问题消失了,这个方法并没有真正被调用。所以我有点困惑。也许这不是我问题的根源,但.. 有点相关。

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2017-12-24
    相关资源
    最近更新 更多