背景
  • app有一个启动页面MainActivity,还有其他的页面OtherActivity(是通过启动页中按钮点击跳转过来的)
  • MainActivity的启动模式为android:launchMode="singleTask"

AndroidManifest.xml文件:

                     
流程
  • 运行app
  • 进入启动页MainActivity
  • 点击按钮启动OtherActivity
  • 按HOME键回到桌面
  • 点击app图标启动

理想的结果是启动app之后界面停留在OtherActivity界面,但是实际上还会重新进入启动界面MainActivity。像一些存在登录界面为启动页面的app,就会出现只要按HOME键就需要重新到登录界面,体验不是很友好。

原因

首先排除系统杀死app进程的原因,因为按HOME键之后通过进程按键是可以启动app,并且还原到按HOME键时的界面。

Android Studio运行启动app的Intent(包含第三方启动应用)和点击app图标启动的Intent内容是不一样的。

解决方案

第一种:
在启动页的onCreate()方法中setContentView之前添加如下代码:

if (null != intent && intent.flags and Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT != 0) {    finish()    return}

有些手机设备上第一种方案可能会无效。

第二种:

if (!this.isTaskRoot) { // 判断当前activity是不是所在任务栈的根    if (intent != null) {        if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN == intent.action) {            finish()            return        }    }}
参考文档

中文 中文2
英文 英文2

更多相关文章

  1. Android快速实现二维码扫描--Zbar
  2. Android(安卓)viewPager实现翻动
  3. Android实现透明指示层
  4. Appium 测试,实现上下、左右滑动页面【Android,iOS 已验证】
  5. Android(安卓)跳转到应用市场详细信息页面
  6. 【Android开发】交互界面布局详解
  7. Android(安卓)UI开发 View自绘控件 分享
  8. Android(安卓)界面切换动画效果
  9. android 请求数据有值,赋值时报错:空指针

随机推荐

  1. 增加Android模拟器的内存
  2. [置顶] Android(安卓)L中的RecyclerView
  3. android binder 机制二(client和普通serv
  4. Android开发之颜色选择器
  5. Ubuntu 下adb连接 android 设备
  6. Android(安卓)animation - 基础
  7. Activity四种启动模式(整合)
  8. Open Core 上层代码结构
  9. Android(安卓)单个应用的内存限制
  10. Android问题:String types not allowed (a