您好我有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>
此外,我正在使用活动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");
}
另外我需要这个的原因是活动A就像一个登录屏幕,活动B就是基于它。活动B不能单独工作。用户必须从活动A转移到活动B
由于
答案 0 :(得分:0)
当我再次尝试打开它时,它从活动B开始。这是预期的吗?
是的,这是预期的行为。
当您按下主页按钮(而不是“后退按钮”)时,默认情况下会将整个任务发送到后台,并在重新启动它时(从最近的任务屏幕或主屏幕上的应用程序图标)它将返回默认情况下,前景具有相同的堆栈状态。 如果您的应用程序在后台保留内存时被系统杀死,则同样的行为也适用。操作系统会将每个活动的状态存储在堆栈中,并在需要重新创建时进行恢复(参见this post)
您可以将与Activity相关的主页按钮想象为Windows操作系统术语中的关系作为“最小化”窗口按钮,后退按钮就像“关闭窗口”(x)按钮。
有办法防止吗?
假设您有充分的理由这样做并打破这种一致性预期行为,您可以使用活动launch mode和intent flags之间的所有组合,它们将为您提供所需的行为。