为什么按BACK会关闭两个活动?

时间:2014-05-14 18:44:54

标签: android

以前从未发生过这件事。

从一个Activity(MyActivity)开始另一个Activity(MainActivity):

Intent in = new Intent(MyActivity.this,MainActivity.class);
startActivity(in)

但是为什么我在MainActivity bot上按BACK会关闭MyActivity和MainActivity?

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
    <activity android:name="MyActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
      <!--You need it for the Service to work-->
    <service android:name=".MyService"></service>
    <activity android:name="zirco.ui.activities.MainActivity"
        android:label="@string/ApplicationName"
        android:configChanges="keyboardHidden|orientation">

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="http" />
            <data android:scheme="https" />
        </intent-filter>
    </activity>

3 个答案:

答案 0 :(得分:1)

您应该使用上下文来启动活动,假设代码在MyActivity.java内,然后尝试:

Intent in = new Intent(this, MainActivity.class);
this.startActivity(in);

或者您可以尝试(如果代码在事件中,例如......):

Context ctx = this;
//stuff
Intent in = new Intent(ctx, MainActivity.class);
ctx.startActivity(in);

答案 1 :(得分:1)

我不是100%肯定你是否必须,但你可以覆盖onBackPressed()方法

@Override
public void onBackPressed(){
    Intent intent = new Intent(getBaseContext() ,MainActivity.class);
    startActivity(intent);
    finish();
}

答案 2 :(得分:1)

这是因为zirco.ui.activities.MainActivity处理后退按钮的方式以及启动它的方式。

您的清单未指定活动的启动模式,因此它使用standard模式:新活动将添加到当前任务的活动堆栈中。

到目前为止一直很好,但zirco.ui.activities.MainActivity调用.moveTaskToBack()作为it's back button handling logic的一部分,这使整个任务 - 包括MyActivity - 转到后面活动堆栈。

因此,您最好的选择是在清单中为android:launchMode="singleTask"声明属性zirco.ui.activities.MainActivity,或者以编程方式设置相应的Intent标记:

Intent in = new Intent(MyActivity.this, MainActivity.class);
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(in);

当然,您也可以修改zirco代码以使用super.onBackPressed()代替moveTaskToBack(),但我猜他们有理由推迟完成整个任务。