android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法

如题。

这个问题困扰了我一下午,查了好多资料都不太跟这个问题沾边,但还是查到了。。记录下来,为了自己,也为了方便别人。

这个问题是因为在AndroidManifest.xml中,你的启动activity中加了android:launchMode="singleTask",将这行代码去掉就可以了。如下图:

关于为什么会引起这个问题,主要还是不太了解activity的launchMode,查了下资料,感觉楼主整理的不错,就引用过来,如下文:

转自http://hi.baidu.com/amauri3389/blog/item/a54475c2a4b2f040b219a86a.html

参见:http://mypyg.iteye.com/blog/919643

http://marshal.easymorse.com/archives/2950

http://blog.csdn.net/infsafe/article/details/5666964

Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别:

standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存在,另一个activity通过Intent跳转到该activity,同样会新创建一个实例压入栈中。例如:现在栈的情况为:A B C D,在D这个Activity中通过Intent跳转到D,那么现在的栈情况为: A B C D D 。此时如果栈顶的D通过Intent跳转到B,则栈情况为:A B C D D B。此时如果依次按返回键,D  D C B A将会依次弹出栈而显示在界面上。

singleTop:如果某个Activity的Launch mode设置成singleTop,那么当该Activity位于栈顶的时候,再通过Intent跳转到本身这个Activity,则将不会创建一个新的实例压入栈中。例如:现在栈的情况为:A B C D。D的Launch mode设置成了singleTop,那么在D中启动Intent跳转到D,那么将不会新创建一个D的实例压入栈中,此时栈的情况依然为:A B C D。但是如果此时B的模式也是singleTop,D跳转到B,那么则会新建一个B的实例压入栈中,因为此时B不是位于栈顶,此时栈的情况就变成了:A B C D B。

singleTask:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了。

关于singleTask这个网上颇有争议,包括google api上的说明也让我看的是一头雾水,自己用实例亲测,终于算是搞清楚了

正解:1.singleTask 并不一定处于栈底

   2.singleTask 并一定会是栈底的根元素 

    3.singleTask 并不一定会启动新的task  

 情况一:如果在本程序中启动singleTask的activity:假设ActivityA是程序的入口,是默认的模式(standard),ActivityB是singleTask 模式,由ActivityA启动,刚ActivityB不会位于栈底,不是根元素,不会启动新的task,此种情况ActivityB会和ActivityA在一个栈中,位于ActivityA上面

  情况二:如果ActivityB由另外一个程序启动:假设apkA是情况一中的应用,apkB是测试程序,在apkB中启动apkA中的ActivityB,刚ActivityB会位于栈底,是根元素,会启动新的task

注意:singleTask模式的Activity不管是位于栈顶还是栈底,再次运行这个Activity时,都会destory掉它上面的Activity来保证整个栈中只有一个自己,切记切记

singleInstance:将Activity压入一个新建的任务栈中。例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。

好了,现在有一个问题就是这时这种情况下如果用户点击了Home键,则再也回不到D的即时界面了。如果想解决这个问题,可以为D在Manifest.xml文件中的声明加上:

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

加上这段之后,也就是说该程序中有两个这种声明,另一个就是那个正常的根activity,在打成apk包安装之后,在程序列表中能看到两个图标,但是如果都运行的话,在任务管理器中其实也只有一个。上面的情况点击D的那个图标就能回到它的即时界面(比如一个EditText,以前输入的内容,现在回到之后依然存在)。

PS:intent-filter中 <action android:name="android.intent.action.MAIN" />和 <category android:name="android.intent.category.LAUNCHER" />两个过滤条件缺一不可才会在程序列表中添加一个图标,图标下的显示文字是android:label设定的字符串。

本文转自:http://blog.csdn.net/lindy8632/article/details/9371869

android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用的解决方法相关推荐

  1. 电脑键盘关机是哪个键_电脑关机后键盘鼠标还亮着怎么关闭?华硕主板的解决方法...

    经常有用户问到我这样的问题,为什么电脑关机之后,键盘和鼠标还是亮着灯,是不是主板有问题,本人真还见过有买家直接说是主板漏电导致的,让我帮忙处理售后.但是呢,这个问题并不是主板上的故障,更不是漏电导致的 ...

  2. android 点击home键回到软件的主页,android 按home键返回到桌面后,再按桌面应用图标又从新打开该应用的解决方法...

    如题. html 这个问题困扰了我一下午,查了好多资料都不太跟这个问题沾边,但仍是查到了..记录下来,为了本身,也为了方便别人. android 这个问题是由于在AndroidManifest.xml ...

  3. android 点击图标重启,Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题的解决方法...

    Android应用第一次安装成功点击"打开"后Home键切出应用后再点击桌面图标返回导致应用重启问题的解决方法 if((getIntent().getFlags() & I ...

  4. Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题...

    最近项目中遇到一个问题,用户第一次安装应用在系统的安装器安装完成界面有"完成"和"打开"两个按钮. 当用户点击"打开"按钮进入用户注册页面进 ...

  5. android手机返回桌面后,点击app图标,app重启

    开发过程中,测试发现app在视频时,华为手机点击home键返回到桌面,再点击app图标,视频页面被干掉了. 经过测试,发现点击app图标后是重新启动了app,也试了其他的app有的也是干掉了Main以 ...

  6. 计算机桌面为什么没有语言栏了,电脑语言栏不见了有哪些解决方法

    电脑的普及,让我们享受到了足不出门就可以满足所有的需求,在我们的使用过程中,不免出现些小问题,比如电脑语言栏不见了,今天我们就来好好的了解下怎样解决吧! 电脑语言栏不见了,解决方法一.打开控制面板.点 ...

  7. win7 计算机 打开很慢,Win7系统电脑开机后第一次打开软件速度慢解决方法

    Win7系统电脑用户量是目前比较大的,因此小编在日常工作中收到Win7系统电脑问题反馈的最多.近期有用户表示,电脑开机之后,第一次打开软件速度都会很慢,不过在关闭软件后再次打开速度就明显得变快,相信大 ...

  8. csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法

    csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法 参考文章: (1)csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计 ...

  9. HC32L系列MCU在KEIL新建工程后在JLINK 下 SW Device下找不到设备的解决方法

    ** HC32L系列MCU在KEIL新建工程后在JLINK 下 SW Device下找不到设备的解决方法 ** 问题:新建工程HC32L的工程,通过JLINK连接目标板,点击KEIL环境的魔术棒,选取 ...

最新文章

  1. C语言指针调用函数_只愿与一人十指紧扣_新浪博客
  2. Cloud Control 13c 13.3安装(二) agent 部署
  3. linux socket 套接字状态 EAGAIN EWOULDBLOCK EINTR 与非阻塞 简介
  4. RDTSC汇编指令详解
  5. asp.net httpclient post 请求头_Java11的HttpClient的使用
  6. postgresql数据库安装以及使用pgadmin连接postgresql数据库
  7. CTF入门--请输入密码
  8. android采用什么图标单位,Android支持的长度单位
  9. C++:32---IO库
  10. 力扣—— 295. 数据流的中位数(困难)
  11. 2010-11-25
  12. web游戏/网页游戏网址
  13. 基于PIC单片机USB接口的数据采集系统设计
  14. Vrep/CoppeliaSim:基础操作(1)
  15. Struts2拦截器的学习
  16. ROS 学习踩坑笔记5-Intel D435相机不发布点云,在RVIZ中,不显示点云(wants topic /image/compressed to have datatype/md5sum)
  17. 最大面额钞票10的21次方
  18. JVM|记一次生产环境 CPU 占用飙高问题解决
  19. 移动端人脸风格化技术的应用
  20. ant design Vue 纯前端实现分页

热门文章

  1. 移动网络安全_徐州市2020年“移动杯”网络安全技能竞赛圆满落幕
  2. 二叉树在计算机应用,2007计算机应用基础A卷-刘谦
  3. pinyin4j入门教程
  4. 1024程序员节|FFmpeg 调整声道数、采样率、码率
  5. 金三银四什么样的面试更有效?
  6. 实现Linux的whoami命令,浅谈linux中的whoami与 who指令
  7. Java实现 蓝桥杯 算法提高 概率计算
  8. 【网络安全工程师面试合集】—一文看懂什么是路由算法
  9. 几种预防禽流感的方法:
  10. 用 Python 开发游戏——Python井字游戏