关于使用Android installer安装应用,安装好之后点击“打开”按钮进入应用之后的界面显示问题

首先在这里提一下,该问题的重现步骤:从应用市场下载好app包->点击包,开始安装->安装成功后,会有一个弹出对话框,其有两个按钮:完成和打开。

接下来用户可能的操作有3种:

第一种,点击“打开”按钮(大部分用户安装完之后就会立即选择打开应用),此种方式打开应用的Intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK;假设应用的主入口Activity为LoginActivity,如果此时用户通过点击事件(一般情况下是)或者其他方式(无所谓)进入到MainActivity(第二个界面,或者随便哪个界面),此时点击“home”键,让应用程序回到Launcher界面;再通过点击Launcher界面上面的应用Icon打开应用(此时打开应用的Intent的Flag有三个:Intent.FLAG_ACTIVITY_NEW_TASK,Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,Intent.FLAG_ACTIVITY

_BROUGHT_TO_FRONT),按照咱们的期望,此时显示的界面应该是MainActivity,但事实上不是这样的,此时显示的是LoginActivity。出现这种问题的原因就是上面标红部分,也就是说,通过不同方式打开应用,系统所发出的打开该应用的Intent的flag也是不一样的。特别注意,这里再次强调一下复现步骤:Android Installer安装完成应用,并点击“打开”->进入LoginActivity(你程序的主入口)->MainActivity(主入口之后的界面)->点击Home键->在Launcher界面点击应用icon启动应用,大家可以注意到,这一些列操作中自始至终没有退出应用的操作(如果退出过应用,你就复现不出来了)。这里介绍一下不同方式启动应用对应的Intent的flag:

安装成功后首次打开应用: 启动应用的intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK

从Launcer界面非首次启动应用:启动应用的intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK和Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED,这是一个组合的Flag(亲测的!)

所以针对此种问题,监测 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT即可,可以这样做:

if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  

//把该代码放在程序主入口的onCreate中
finish();
return;
}

第二种,点击“完成”,此种方式打开应用的Intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK

第三种,点击home键,从Launcher启动应用此种方式打开应用的Intent的flag为Intent.FLAG_ACTIVITY_NEW_TASK和Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED


相关文章:http://stackoverflow.com/questions/29875772/unknown-intent-flag-on-launcher-activity

http://stackoverflow.com/questions/6356467/activity-stack-ordering-problem-when-launching-application-from-android-app-inst

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值