在项目中,遇到一个问题百思不得其解,那就是:我在app使用过程中,点击了home键,然后去看看微信之类的其他应用,这个时候再点击app桌面的图标,这个时候app是重新启动的,而不是从上次停止的界面开始的。

对于上面的情况,我觉得既然我的app已经在后台还运行着,为什么就不能继续重上一个界面继续运行,非得从新运行呢。然后我就去查资料解决了这个问题。首先讲讲这个现象的本质。

原因:当点击app桌面图标时,app默认是任务你要新建一个应用,而不会去判断你后台有没有再运行的相同应用。

经过实践我发现:当你点击应用桌面图标,应用会重新创建你的app的启动页,然而,你快速的点击返回按钮,你会发现你会回到上一次退出时的界面。经过查阅资料发现,系统会记录你启动acitivity的启动顺序的栈。并且把当前的启动页放到了最上方,如下图所示:

注意:资料上面说以前启动的activity都是不在了,只是系统记录了他们启动的顺序,然而你按返回键,系统就会自动的重新创建新的activity,加入当app依次启动了1到11的activity,然而,在11这个activity的时候,你点击了home键、或点击了其他软件如微信qq等,这个时候你的app进入后台,1到11的这些activity其实被系统回收了,但是系统记录了这个activity启动顺序的栈,然后当你回到这个应用时,实际上系统是重新创建了Activity11,然后点击返回键,右重新创建了Activity10,就是这样倒序 创建activity的原理


然而,当你把App放入后台时,这个时候点击了app桌面的启动图标,这个时候系统会默认你开启一个新的应用,但是因为一个软件只能在手机上面运行一个,所以,系统发现你之前的app还在后台,这个时候系统会把新创建的activity放到了之前activity栈的顶部,如上图所示的Activity1

知道了原因之后,我们就好做处理了。

第一步:查看Activity1的启动模式,如果Activity1的启动模式为singleTask

android:launchMode="singleTask"

那么必须把他删除掉,或者改为“standard"。

第二步:在你的app的AndroidManifest.xml文件的application标签下面设置

android:persistent="true"

持久化为 true;防止你的app挂后台被回收。

第三步:在activity1的onCreate方法中设置如下方法:

@Override
protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  finish();  return;  }  setContentView(R.layout.activity1_layout);// Regular activity creation code...
}

其实就是在setContentView()之前设置如下代码:

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

用于判断这个Activity的启动标志,看它所在的应用是不是从后台跑到前台的。如果是,则直接把它finish()掉,然后系统会去Activity启动历史栈查询上一个activity,然后再新建它,所以还原到了我们按home键出去的那个界面。

好了,就这样解决了App在后台运行,点击应用图标它会重新启动的问题。希望对你有所帮助!


怎样防止App在后台运行,点击应用桌面图标重新启动相关推荐

  1. 解决:Android App 在运行时候按下 home 键,让App 在后台运行,点击图标再次进入时防止应用重新启动

    一些体验上的优化 一:app 退出时,让 app 在后台运行,类似于 home 键的功能,最小化 二:Android 点击 Home 键后再点击 APP 图标,APP 显示退出之前的界面 一:app ...

  2. iOS保持App真后台运行

    https://www.jianshu.com/p/d466f2da0d33 在我看来,苹果系统与安卓系统最直观的区别就是后台处理方式了吧,安卓手机一旦开启了很多app放到后台,即使前台什么也不做,就 ...

  3. android app锁定后台运行的方法

    想直接看图操作,可以android 下一个 小米穿戴 然后 我->开启后台运行权限 ->点击当前手机后面的 里面有 小米MIUI,华为EMUI,OPPO ColorOS ,Vivo Fun ...

  4. APP在后台被系统回收后,如何重新启动

    问题: app运行在后台,android系统会在内存不够用的时候,回收app,如果app中有全局的变量,那么再次打开app可能会出现崩溃的情况. 示例: 示例源码 public class MyApp ...

  5. Android桌面图标布局,android安装运行launcher并修改桌面图标

    以系统及程序的方式安装和运行Launcher,才能在Launcher启动的时候就让默认的AppWidget程序显示出来.否则将会出现 java.lang.SecurityException: bind ...

  6. Android长时间后台运行,内存被回收再次打开导致APP崩溃(APP在后台被系统回收后,如何重新启动?)

    问题: 因为手机内存不足的时候,会回收一些APP所占内存,如果被回收的APP中有全局变量,那么再次进入这个APP就会导致异常报错: 原因: 因为Application是全局变量,内存不足的时候会被回收 ...

  7. App在后台运行时如何保存数据到sqlite数据库

    iOS程序进入后台后,是不允许读写任何文件和数据库(sqlite),但是允许读写NSUserDefault中得数据.因此在后台时如果想存储数据,则可使用NSUserDefault(偏好设置)临时保存数 ...

  8. android游戏后台运行点击桌面游戏图标游戏重启的解决方法

    最近使用unity做游戏发布android游戏,内置付费功能实现后,付完费停留在付完费界面的时候点击home键回到手机桌面,然后点击游戏图标游戏重启.付费失败.但是钱已经扣了,这就比较坑了.然后查了一 ...

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

       问题:  在一次app测试中,偶然发现打开项目按下home键,回到桌面,再次点击app图标,进入app,切换之前的页面突然退出,回到了首页,开始以为是该页面出现bug崩溃了,查看日志,并未发现错 ...

最新文章

  1. 自动驾驶车辆在结构化场景中基于HD-Map由粗到精语义定位
  2. 魔兽世界服务器位面 稳定,因抗议《魔兽世界》位面技术在RP服务器中被取消
  3. 论文:Multi-Objective Modified Grey Wolf Optimizer for Optimal Power Flow-最优潮流
  4. oracle表空间最大30G?如果一张表超过30G怎么办
  5. 8.初探python之集合
  6. WIN7 中配置局域网
  7. 【VS开发】CString 转为 char *方法大全
  8. stringbuilder删除最后一个字符_Java类-StingBuffer,StringBuilder
  9. C#创建无数据源水晶报表极简教程
  10. 【入门】用matlab做数字信号处理(学习记录)
  11. Spring tool suite4 安装及配置
  12. 2017企业咨询服务公司排行榜
  13. Spring的UriComponents
  14. 年轻人还记得KCP吗?什么是KCP,怎么使用呢!!!
  15. MySQL数据库如何备份、恢复、导出与导入
  16. 平均年薪 50 万的无人驾驶工程师,需要掌握这 5 大关键技术
  17. 服务器bios上传文件,巧改BIOS设置 让文件服务器性能提升10%
  18. android程序保活官方推荐
  19. 神都夜行录无法显示服务器,神都夜行录登录不上怎么办 登录不上解决方案
  20. 谷歌浏览器导出扩展程序中的文件

热门文章

  1. 计算机辅助翻译何其莘在线阅读,何其莘教授为你揭秘《新概念英语》
  2. 华为P20 HL2EMILYM电路图
  3. ElasticSearch文本分析(一)
  4. 从人被造的目的看灵魂的价值2014-07-07 唐崇荣 祷告吧
  5. 巴菲特致股东的一封信:2012年 和学习心得
  6. 【Google Play】管理目标受众群体 ( 加入“亲子同乐计划“ | 应用受众覆盖所有年龄段 )
  7. SSD性能优化之4K对齐
  8. 基于JAVA EE的驾校驾照考试系统
  9. Python -- jpype JVM的第三方库使用
  10. 编写程序描述兔子和青蛙