【问题标题】:Android onCreate called on Second ActivityAndroid onCreate 在第二个活动上调用
【发布时间】:2015-01-15 17:12:53
【问题描述】:

您好,我有 2 项活动, 活动 A 和活动 B, 所以它的活动 A 和一个按钮点击我去活动 B。 现在我按下主页按钮,然后去做许多其他事情。由于内存问题,任务被android关闭。现在,当我尝试再次打开它时,它从活动 B 开始。这是预期的吗? 如果是,有没有办法防止它?

下面是定义两个活动的 AndroidManifest 部分 活动 A = MenuActivity,活动 B = AndroidLauncher

<activity
            android:name=".AndroidLauncher"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
            android:label="@string/app_name"
            android:finishOnTaskLaunch="true"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".MenuActivity"
            android:clearTaskOnLaunch="true"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

我也放了Activity B的onCreate代码

protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_view);
            AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
        int gameType = getIntent().getIntExtra("GAME_TYPE", 0);
        GDXtoAndroidInterface.sharedInstance().activity = this;
        TurnBasedHelper.sharedInstance().listener = this;
        FrameLayout lg=(FrameLayout)findViewById(R.id.layout);
        lg.addView(initializeForView(new LetterPress(GDXtoAndroidInterface.sharedInstance(),gameType), config));
        busyDialog = new ProgressDialog(this);
         busyDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
         busyDialog.setCanceledOnTouchOutside(false);
         busyDialog.setCancelable(false);
         showBusy("Setting up..");
         Log.d("MSG", "on create called launcher");
    }

另外我需要这个的原因是 Activity A 就像一个登录屏幕,而 Activity B 是基于它的。活动 B 不能单独进行。用户必须从活动 A 移动到活动 B

谢谢

【问题讨论】:

  • 请参阅有关 Activity 生命周期的 Android 文档:developer.android.com/training/basics/activity-lifecycle/…
  • 是的,这是应用程序的预期行为。您的应用程序只是最小化。每个应用程序都以这种方式工作。正如@MarcinOrlowski 所说,检查 Android 文档和 Activity 生命周期 :) 干杯
  • @MarcinOrlowski 我想总是从Activity A开始在这种情况下如何实现呢?
  • @PeterM。如何始终从 Activity A 开始

标签: android


【解决方案1】:

当我尝试再次打开它时,它会从 Activity B 开始。这是预期的吗?

是的,这是预期的行为。

当您按下主页按钮(不是“返回按钮”)时,整个任务默认发送到后台,当重新启动它(从最近的任务屏幕或主屏幕上的应用程序图标)时,它会返回默认情况下,前景与堆栈状态相同。 如果您的应用程序在后台被系统杀死以保留内存,则同样的行为也适用。操作系统会将每个活动的状态存储在堆栈中,并在需要重新创建时将其恢复(参见this post

您可以将与 Activity 相关的主页按钮视为 Windows 操作系统术语中的“最小化”窗口按钮,而后退按钮就像“关闭窗口”(x) 按钮。

有办法防止吗?

假设您有充分的理由这样做并打破这种一致性预期行为,您可以使用活动 launch modeintent flags 之间的各种组合,这将为您提供所需的行为..

【讨论】:

  • 我猜正在发生的事情是“如果您的应用程序在后台被系统杀死以保留内存,则同样的行为也适用。操作系统会将每个活动的状态存储在堆栈中,在需要重新创建时恢复它”。我想阻止它,我在 ActivityB 上尝试了 finishOnTaskLaunch,在 ActivityA 上尝试了 clearTaskOnLaunch。但没有任何效果。
  • @GeoPaul:将activity声明的代码贴在manifest中,以及启动activityB的startActivity() java代码。
  • @GeoPaul:将 android:launchMode="singleTop" 添加到您的 AndroidLauncher 活动中会有所帮助。您也可以在第二个活动中使用 android:noHistory="true"
  • 我认为 android:noHistory 是我正在寻找的那个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
相关资源
最近更新 更多