本地安装apk后直接打开,按下Home键再从新打开,而后按下返回键时页面展现错误的处理方法

情景:app

一、下载apk到手机本地,点击本地apk开始安装spa

二、安装完成后,通常会有 “完成” 和 “打开” 两个按钮,点击 “完成” 按钮时是没有问题的,无论它code

三、点击 “打开” 按钮,进入到首页(好比MainActivity),打开其余页面(好比GameActivity),而后按下Home键blog

四、返回桌面后,再次点击桌面上的app图标get

  • 咱们的指望是:从新打开app以后,应该能看到 GameActivity 页面
  • 然而事实是:从新打开app以后,展现的是 MainActivity,当点击返回时,才看到GameActivity。也就是说,从新启动应用后,以前的页面也没有被kill掉,至关于打开了两个相同的应用。第一感受就是 onCreate() 方法被反复调用,onResume() 没发挥做用。

 

解决方法:it

  网上都是说将第二个页面的launchMode属性设置为singleTask,好比说有两个页面,第一个是登陆界面,第二个为主界面,将主界面的启动模式设置为singleTask,这样虽然按照以前的操做流程,在第二次打开应用,进到主界面的时候,只有一个,可是这样每次都要到登陆界面再到主界面,状况虽然有所改善,但仍是没有完美解决。io

下面介绍一种比较好的处理方法:class

1 protected void onCreate(Bundle savedInstanceState) {  
2        super.onCreate(savedInstanceState);  
3        int flag=getIntent().getFlags();  
4        System.out.println("getFlags---"+flag+"------"+(flag&Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT));  
5        if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {    
6                 finish();  
7                 return;  
8            }  
9     }  

   在手机上按照情景描述那样操做,能看到下面的输出。第一行表示正常打开时 flag 标志是268435456,Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 标志是0;第二行表示从新打开app的结果,很明显 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 标志再也不是0,因此咱们在setContentView()以前直接finish掉它或者执行onResume()方法来恢复以前的页面。test

 

  另外也能够检查一下另外一个标志:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED。这个没使用过,没什么体会,仅供参考吧!登录

 

参考资料:How to return to the latest launched activity when re-launching application after pressing HOME

相关文章
相关标签/搜索