Android Studio物联网开发学习笔记之一:使用intent与返回键导致的页面回跳

本系列文章旨在为新手开发Android Studio提供助力和参考,博主也是小白一名,仅想将自己在开发中遇到的问题与自认为比较好用的解决方法写在文章中提供给大家参考,不懂的和能改进的地方还有很多,希望大家能在评论中斧正。

遇到的问题

在开发过程中,如果使用了intent进行多个activity互相的跳转会发现,会有回跳的现象发生,例如index→activity1→activity2,使用intent,按下自定义的按钮实现返回,activity2→activity1。
这时如果不使用intent,按系统返回键会出现:
activity1→activity2,activity2→activity1→index。
我们看到1首先回到了2,但是我们希望的是activity1无论在何种情况下按返回键都返回index。出现这种情况是因为每次生成新的activity会压栈,而按下返回键则会出栈。
除此之外,要注意,如果仅使用intent,还不将栈清理干净就退出程序的话,在某些手机上仍有可能因为仍然存在activity而重新启动APP。

解决方法

1.MyIntent.setFlag

如果你只有两个页面的话可以使用,当你定义intent实例时写为如下代码:

Intent MyIntent = new Intent(MyActivity.this, MainActivity.class);
MyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

其原理是,当你在此活动下使用intent进入新的页面,会清除栈里的所有任务,这时再按下系统返回键就不会发生回跳的现象了。但这种方法只有当你使用两个activity时不必担心index会被清除,所以在页面跳转中不是很推荐。

2.MyActivity.this.finish()+singletask启动方法

activity是有4种启动模式的standard,singleTop,singleTasksingleInstance,你可以在AndroidManifest中修改每一个activity的启动方法,如下所示:

他们4个的具体区别可以去搜索相关文档,我们这里只介绍到了singletask启动方法。
首先来看一下finsh(),它的作用是结束当前activity,拿上面的例子说明,我们如果在activity2中添加finsh(),再按返回键,就不会出现activity1→activity2的情况,而是会返回activity2的发起者,也就是第一次出现的activity1,代码如下:

Intent i=new Intent(Activity2.this,Activity1.class);//定义intent实例2跳转到1
                startActivity(i);//跳转
                Activity2.this.finish();//结束activity2

最终流程是activity1→activity1→index,这时仍然没有达到我们的目的,所以要配合singletask共同使用。
如果我们不设置启动模式的话,会默认为standard方法,这种方法下,只要使用intent转到其他activity,就会再次创建一个新的activity,无论之前是否有创建过一样的activity,当我们设置为singletask时,栈中只会出现一个同类型的activity,不会重复创建新的,所以我们只需要将finsh()和singletask结合使用就可以达到我们的最终目的。

注:Android也是支持进行栈的其他操作的,同样可以到达目的,奈何博主才疏学浅,如果以后见到更好的方法,或者各位有更好的方法希望能在评论区留言。

你可能感兴趣的:(android,studio)