我的应用在用户首次运行应用时显示了注册活动,如下所示:
ActivitySplashScreen(欢迎来到游戏,注册一个帐户?)
ActivitySplashScreenSignUp(很棒,请填写此信息)
ActivityGameMain(主游戏画面)
因此,当用户点击每个屏幕上的按钮时,活动将以完全相同的顺序相互启动.
当用户从活动#2转到#3时,是否可以完全从历史堆栈中删除#1和#2?我喜欢它,以便如果用户在#3,并点击后退按钮,他们只是转到主屏幕,而不是回到启动画面.
我想我可以用任务来完成这个任务(即在#3上开始一个新任务)但是想看看是否有更简单的方法,
谢谢
您可以通过在文件的相关条目中设置android:noHistory
属性来实现此目的.例如:"true"
AndroidManifest.xml
您可以使用转发从活动堆栈中删除以前的活动,同时启动下一个活动. 在APIDemos中有一个这样的例子,但基本上你所做的只是在打电话finish()
后立即打电话startActivity()
.
是的,看一下Intent.FLAG_ACTIVITY_NO_HISTORY.
这可能不是理想的做法.如果某人有更好的方法,我将期待实施它.以下是我使用pre-version-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(); } }
然后需要从堆栈中引发弹出链的那个需要在你想要启动时调用它:
NextActivity.this.setResult(R.string.unwind_stack_result_id); NextActivity.this.finish();
然后活动不在堆栈上!
记住,你可以开始一个活动,然后开始清理它,执行不遵循单个(ui)线程.
在API 11之前工作的一种方法是首先启动ActivityGameMain
,然后在该onCreate
Activity中启动您的ActivitySplashScreen
活动.ActivityGameMain
因为你过早地调用startActivity 而不会出现这种情况.
然后,您可以ActivityGameMain
通过在Intent上设置这些标志来清除堆栈:
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
您还必须将其添加到ActivitySplashScreen:
@Override public void onBackPressed() { moveTaskToBack(true); }
因此,重新开始这项活动并不会回到你的身上ActivityGameMain
.
我假设你不希望闪屏再次出现,为了达到这个目的,我建议将它设置为noHistory
你的AndroidManifest.xml
.然后将goBackPressed
代码放入您的ActivitySplashScreenSignUp
课程中.
但是我找到了一些方法来打破这个.ActivitySplashScreenSignUp
显示时从通知启动另一个应用程序,并且不重置后退历史记录.
API 11中唯一真正的解决方法是:
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
我用这种方式.
Intent i = new Intent(MyOldActivity.this, MyNewActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK) startActivity(i);
我知道我迟到了(问题问题已经过去两年了)但是我通过拦截后退按钮完成了这个.我只是查看计数,而不是检查特定活动,如果它小于3,它只是将应用程序发送到后面(暂停应用程序并将用户返回到启动前运行的任何内容).我检查的不到三个,因为我只有一个介绍屏幕.此外,我检查计数,因为我的应用程序允许用户通过菜单导航回主屏幕,因此这允许他们通过其他屏幕备份,如果除了堆栈上的介绍屏幕之外的其他活动.
//We want the home screen to behave like the bottom of the activity stack so we do not return to the initial screen //unless the application has been killed. Users can toggle the session mode with a menu item at all other times. @Override public void onBackPressed() { //Check the activity stack and see if it's more than two deep (initial screen and home screen) //If it's more than two deep, then let the app proccess the press ActivityManager am = (ActivityManager)this.getSystemService(Activity.ACTIVITY_SERVICE); Listtasks = am.getRunningTasks(3); //3 because we have to give it something. This is an arbitrary number int activityCount = tasks.get(0).numActivities; if (activityCount < 3) { moveTaskToBack(true); } else { super.onBackPressed(); } }
只需noHistory="true"
在Manifest文件中设置即可.它使活动从后台堆栈中删除.
在清单中,您可以添加:
android:noHistory="true"
你也可以打电话
finish()
调用startActivity(..)后立即