我的应用程序显示注册活动的第一次用户运行应用程序,看起来像:

ActivitySplashScreen(欢迎加入游戏,注册账号吗?) ActivitySplashScreenSignUp(很好,填写这个信息) ActivityGameMain(游戏主界面)

因此,当用户单击每个屏幕上的按钮时,这些活动以相同的顺序相互启动。

当用户从活动#2到#3时,是否有可能将#1和#2从历史堆栈中完全擦除?我希望这样,如果用户处于#3,并点击返回按钮,他们只会回到主屏幕,而不是回到启动画面。

我想我可以完成任务。开始第三项任务,但想看看是否有更简单的方法,

谢谢


当前回答

在这里我列出了一些完成这个任务的方法:

转到manifest.xml-并输入android:noHistory="true",从堆栈中删除活动。 当从当前活动切换到其他活动时,在意图设置标记为(意图。Intent.FLAG_ACTIVITY_CLEAR_TASK)。下面的示例演示了这一点。 Intent = new Intent(CurrentActivity. CurrentActivity.)这一点,HomeActivity.class); intent.setFlags(意图。FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK) startActivity(意图);

注意:放置意图标志会导致一段时间的黑屏(当切换活动时)。

其他回答

您可以使用转发从活动堆栈中删除前一个活动,同时启动下一个活动。APIDemos中有一个这样的例子,但基本上你所做的只是在调用startActivity()之后立即调用finish()。

是的,看看Intent.FLAG_ACTIVITY_NO_HISTORY。

在清单中,您可以添加:

android:noHistory="true"

<activity
android:name=".ActivityName"
android:noHistory="true" />

你也可以打电话

finish()

在调用startActivity(..)

你可以通过在AndroidManifest.xml文件中的相关<activity>条目中将android:noHistory属性设置为“true”来实现这一点。例如:

<activity
    android:name=".AnyActivity"
    android:noHistory="true" />

这可能不是理想的方法。如果有人有更好的办法,我会很期待去实施。以下是我如何使用11版本前的sdk完成这一特定任务。

在每节课上,你都想在时间清楚的时候离开,你需要这样做:

    ... interesting code stuff ...
    Intent i = new Intent(MyActivityThatNeedsToGo.this, NextActivity.class);
    startActivityForResult(i, 0);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == R.string.unwind_stack_result_id) {
        this.setResult(R.string.unwind_stack_result_id);
        this.finish();
    }
}

然后,当你想要初始化它时,需要从堆栈中设置弹出链的函数需要调用this:

NextActivity.this.setResult(R.string.unwind_stack_result_id);
NextActivity.this.finish();

那么活动就不在堆栈上了! 请记住,你可以启动一个活动,然后开始清理它的背后,执行并不遵循一个单一的(ui)线程。