Android:完成()

时间:2015-11-19 10:46:03

标签: android android-activity android-lifecycle

我有2项活动。第一项活动是LogoActivity。 3秒后,我开始第二个活动,即MainActivity

private void startCountDown(int duration, int interval) {
    CountDownTimer mCountDownTimer = new CountDownTimer(duration, interval) {
        @Override
        public void onTick(long millisUntilFinished) {
            // nothing
        }

        @Override
        public void onFinish() {
            startActivity(MainActivity.class);
            finish();
        }
    };

    mCountDownTimer.start();
}

startActivity(Class mClass)是我创建的方法,只是通过提供类来启动任何活动。

现在我在MainActivity。如果我通过按主页按钮退出并返回,我会看到MainActivity,但如果我从MainActivity按回按钮并从后台重新打开应用,LogoActivity将首先显示。

我不希望用户每次从LogoActivity按回按钮(来自电话,而不是活动的按钮)时都会看到MainActivity并从后台恢复。

如果我拨打LogoActivity,为什么会显示finish()

8 个答案:

答案 0 :(得分:2)

当您按下后退按钮时,MainActivity的实例将被销毁。

然后再次回到此任务堆栈,LogoActivity是您的默认活动,因此系统会为您创建一个实例。

您可以将MainActivity作为manifest.xml中的默认活动

<activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

在MainActivity的onCreate方法中启动LogoActivity,以便用户首先看到LogoActivity。

3秒后,完成LogoActivity。

答案 1 :(得分:1)

如果我调用finish(),为什么会显示LogoActivity?

答案是 - 当您启动应用程序时,系统会检查应用程序的ManifestFile以获取其Intent-filter操作和类别设置为“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”的活动。

此活动是您应用的启动器(第一个)活动。 (我认为,在你的情况下,它是LogoActivty)。

当您启动应用程序时,“Android系统”会在您的Activity堆栈中添加此活动。当您启动其他活动时,也会将其添加到活动堆栈的顶部。

完成活动后,它将从活动堆栈中删除。

每当您启动应用程序时,“Android系统”会跟踪活动堆栈以获得最高级别的活动。并从该应用程序启动您的应用程序。

如果发现活动堆栈为空,系统会使用您应用的launcherActivity启动您的应用。

在你的情况下你完成了两个活动。那么你的活动堆栈变空了,它会用LogoActivity启动你的应用程序。

<强>解

覆盖MainActivity中的onBackPress方法,不要调用finish。但在这种情况下,您的活动不会关闭onbackPress。

或进行MainActivity启动器活动

答案 2 :(得分:0)

因为使用Back vs Home按钮不同。请参阅Android活动生命周期:http://developer.android.com/intl/es/reference/android/app/Activity.html

答案 3 :(得分:0)

您必须使用Intent进行新活动。像这样。

startActivity(new Intent(LogoActivity.this, MainActivity.class));
finish();

startActivity(MainActivity.class)的实例

答案 4 :(得分:0)

尝试重复onBackPressed()方法

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

答案 5 :(得分:0)

尝试控制活动的onBackPressed()方法。

答案 6 :(得分:0)

您可以使用清单中的活动属性来实现相同的目标。

&#34;机器人:finishOnTaskLaunch&#34;

有关详情,请访问http://developer.android.com/guide/topics/manifest/activity-element.html

答案 7 :(得分:0)

始终使用intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);