问题: 

在一次app测试中,偶然发现打开项目按下home键,回到桌面,再次点击app图标,进入app,切换之前的页面突然退出,回到了首页,开始以为是该页面出现bug崩溃了,查看日志,并未发现错误日志,于是在页面的生命周期方法中,写上log,再次重复了上述操作,进入app后,页面一样的退出,查看log,当前页执行Resume()方法后,再次执行了Destroyed()方法,切换了其他页面,发现都会退出,于是在Application文件中的onCreate()中,监听所有页面的生命周期,方法如下:

  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityStopped(Activity activity) {Log.v("viclee", activity + "onActivityStopped");count--;if (count == 0) {Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到后台  lifecycle");}}@Overridepublic void onActivityStarted(Activity activity) {Log.v("viclee", activity + "onActivityStarted");if (count == 0) {Log.v("viclee", ">>>>>>>>>>>>>>>>>>>切到前台  lifecycle");}count++;}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {Log.v("viclee", activity + "onActivitySaveInstanceState");}@Overridepublic void onActivityResumed(Activity activity) {Log.v("viclee", activity + "onActivityResumed");}@Overridepublic void onActivityPaused(Activity activity) {Log.v("viclee", activity + "onActivityPaused");}@Overridepublic void onActivityDestroyed(Activity activity) {Log.v("viclee", activity + "onActivityDestroyed");}@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {Log.v("viclee", activity + "onActivityCreated");}});

再次执行后台切换前台操作,发现打印的日志如下:

发下启动页(WelcomeActivity)竟然启动了,当前页执行了退出操作(Destroyed)。

原因:
   app启动的过程有两种情况,第一种是从桌面launcher上点击相应的应用图标,第二种是在activity中通过调用startActivity来启动一个新的activity。上述的问题,刚好属于第一种,启动情况,当我们点击应用图标的时候,会重新启动app,启动新的堆栈,清除之前的堆栈,所以之前开启的页面都会被清除。

解决方法:

在启动页的onCreate()方法中加入:

if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){finish();return;}

因为启动每一个activity会在intent中设置一个flag,详情需要了解app的启动过程。

设置之后再看下生命周期的log:

发现启动页再次启动后,立即执行Destroyed方法,return阻止了后续的操作,也就保留了当前页的显示状态。

android程序按home切换到后台,点击launcher的图标切换到前台,当前页面退出回到启动页相关推荐

  1. Android开发之最简单的布局点击Tab和Fragment切换源码(特别适合初学者)

    老套路看效果图: 说实话这个布局实现的思路太多了,自己写以及第三方都特别多,不过对于初学者还是从一点一滴开始学起比较简单也容易理解.直接上源码吧,我这个是用的最新的AndroidX库和Kotlin写的 ...

  2. java 切换后台程序_将 Android 程序切换到后台及从后台切换到前台实现

    将 Android 程序切换到后台及从后台切换到前台实现 有时候, 我们需要将自己的 Android 程序切换到后台运行, 在必要时, 将其切换到前台运行下面提供了一种实现方式, 首先需要引用三个单元 ...

  3. android程序怎么执行,电脑怎么运行安卓手机程序【详细介绍】

    电脑怎么运行安卓手机程序? 我们都知道安卓手机程序在手机在运行很好,但是如果有时候我们不想在手机上运行,想在电脑上运行又该怎么办呢? 下面,我们就以支付宝钱包为例来模拟运行吧. 1.首先下载最新版的B ...

  4. eclipse运行Android程序报错,找不到adb.exe或要你重启eclipse的解决方法

    这几天打开eclipse准备运行Android程序,一开始好好的,之后像大姨妈一样的,说来就来,老是启动报错Cannot run program "D:\computer master\an ...

  5. 记录winform 点击单元格自动切换英文输入法的问题

    这里写自定义目录标题 点击单元格直接切换英文输入法 点击单元格直接切换英文输入法 问题现象:启动winfrom点击单元格或其他单元格时输入法自动变更为英文,但这一现象不是所有电脑才有,个别电脑也会按照 ...

  6. 解决 Android APP 启动页白屏问题及如何实现全屏显示

    目录 一.白屏原因分析 二.解决白屏方案 方案一.提供 .png 背景图 方案二.使用 Layout-list 制作背景 1.  制作替代白屏的背景:bg_splash.xml 2. 将 bg_spl ...

  7. android 加载图片 白屏,android启动页白屏和图片自适应问题

    android启动页白屏和图片自适应问题,自适应官方给的说法也只是做多套图去适配不同的分辨率,本文通过几个设置几行代码即可解决启动页短暂白屏和自适应问题. 网上的说法是通过启动页代码裁切图片或者在Im ...

  8. qt for android程序保活 程序后台一直运行不被清理掉(未完)

    本博主要就是分享如何让qt开发的android程序在手机上运行,切换到后台的时候,程序仍然在一直运行,为什么这么做呢,因为我有需求是app连接蓝牙后,程序切换到后台,仍然能接受到蓝牙发送的数据并保存时 ...

  9. Android 程序后台运行和锁屏运行

    Android 后台服务保活 需求 方案 推广一下我的个人博客小站: Z同学 期待大家的围观 需求 1.在华为手机中应用切换到后台后,打开其他app.需要我的应用后台仍然能够访问http,传输数据. ...

最新文章

  1. lpc3250 TFT-4238液晶支持
  2. 虚拟机 fedora 18 服务器,VM虚拟机中的Fedora设置固定IP上网的方法
  3. Android:获取最近打开app列表
  4. 基于麻雀搜索的PID神经网络解耦控制算法 - 附代码
  5. mysql权限查看_教您如何查看MySQL用户权限
  6. 框架的配置文件的映射机制
  7. 海康sdk java_java调用海康sdk案例
  8. 集成DC电源RS485/422收发器数字隔离芯片CA-IS309X
  9. vue slideup_像jQuery的slideUp / slideDown一样,但是对于Vue
  10. PHPWord Beta 0.6.2 开发者指南
  11. 为什么我的程序中没有stdafx.h头文件?
  12. SQLITE3插入、查询效率的优化方法
  13. FusionCharts的基本使用(3)
  14. 腾讯微服务框架 Tars 的 Go 性能提升之路
  15. mysql cache lock_mysql服务器上有sql状态status显示 Waiting for query cache lock?
  16. 生物发光及化学发光的原理及其应用
  17. 业务需求近期准备深度学习下SpringCloud为加深印象提高学习效果故做此笔记以备后面复习查看之用
  18. 【C++】C/C++内存管理
  19. 7-1 IP地址转换 (20分)PTA
  20. 简单Android app之 一键签到 开发日记

热门文章

  1. 免越狱无视证书掉签,只需这几步简单解决,不再为记录发愁
  2. matlab控制倒立摆小车并绘制二维动态效果图
  3. centos7 搭建nginx+python+php 环境
  4. caj文件怎么转换成pdf格式?三步搞定
  5. VMware-VSphere
  6. 企查查在哪查实缴_为什么在天眼和企查查查询公司的实缴资金都不一样?
  7. Ubuntu+Qt下配置车牌识别系统EasyPR1.6环境
  8. Beego脱坑(十四)ORM高级查询
  9. iphone5g信号测试软件,iPhone 12的5G信号测评曝光:测试速度为197Mbps
  10. 彩虹表-破解哈希算法