文档章节

[Andriod] android中singleTask的home键的问题

枫兮兮
 枫兮兮
发布于 2014/03/19 18:00
字数 651
阅读 2786
收藏 1

在Android设计中遇到这样一个问题:

      Activity A,在AndroidManifest.xml中设置它的一个<inter-filter>为

Java代码  收藏代码

<intent-filter>  
    <action android:name="android.intent.action.MAIN" />  
 <category android:name="android.intent.category.LAUNCHER" />  
</intent-filter>

      A的launchMode为“singleTask”。

      Activity B,设置launchMode为“standard”。

      这样,A作为启动应用的入口Activity;在A中进行某个操作可以跳转到B。

      如果此时,点击‘Home’键返回到Home Screen后,再次点击应用图标进入应用,出现的界面为A,而非B。通过一些测试,发现,在重新进入应用时,在Back stack中,位于A之上的其他Activity均被销毁了。

开发的时候,由于用到了singleTask用法不当,造成了一些不必要的麻烦,现总结如下:

现有Activity:A,B,C,D;启动顺序是A->B->C->D,其中,B是singleTask的。

A到B后,A finish掉;B到C后,B不finish;C到D后,C不finish;在D启动B,就可以一下子将C、D kill掉,只保留B。但是,

这个时候你从B退出(整个程序退出了),长按Home键启动,进来的第一个是B,而不是A,这就已经不对了;  而且, 刚才就算你不退出,从B再进到C,按Home,再长按Home进入,回来的是B而不是C。

解决方案如下:

将singleTask改成singleTop。

这样以来,刚才从D启动B的时候,就要用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

也就是说,singleTask会自动执行clear top, 而singleTop需要手动;而从Home键启动,如果是singleTask的话就自动clear top了,所以到不了想要到的Activity。

这样就解决了问题,但是上面的说法是个人的理解。


至此,我们总结一下,设置了"singleTask"启动模式的Activity的特点:

        1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值 taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置 了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。

        2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实 例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。


© 著作权归作者所有

枫兮兮
粉丝 12
博文 72
码字总数 27211
作品 0
成都
私信 提问
Android 深入探讨Activity的四种启动模式

四种启动模式的异同点 1.singleTask,singletop,singleInstance 某种情况下基本上都具有保证Activity在任务栈中具有唯一性 2.singleTask和singleTop实例存在时,singleTask不会创建实例,sin...

IamOkay
2014/11/22
0
0
Activity启动模式&Task栈

在AMS中,ActivityRecord对应一个Activity,TaskRecord对应一个Task,每个TaskRecord中保存了若干ActivityRecord,TaskRecord由taskId标识,通过getTaskId()可以获取Activity所属的Task。Act...

JasmineBen
2018/05/30
0
0
Android 四种加载方式详解(standard singleTop singleTask ...

Android 四种加载方式详解(standard singleTop singleTask singleInstance) 2012-02-03 14:05Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开......

gavin_jin
2012/02/29
0
0
安卓开发app在后台运行时页面数据被系统清除后操作之重启APP

在安卓开发过程中,当点击HOME键,将app运行在后台时,然后再点击app图标进入时,遇到了如下两种情况: 1、每次打开时,app的入口页面总是被执行。 2、当运行内存被其它应用占用完时,在进入...

Prime_T
2018/09/05
0
0
[Android] Activity的Launch mode详解

Activity有四种加载模式:standard(默认), singleTop, singleTask和 singleInstance。以下逐一举例说明他们的区别: standard:Activity的默认加载方法,即使某个Activity在Task栈中已经存...

枫兮兮
2014/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nproc systemd on CentOS 7

Increasing nproc for processes launched by systemd on CentOS 7 Ask Question I have successfully increased the nofile and nproc value for the local users, but I couldn't find a p......

MtrS
24分钟前
1
0
了解微信小程序下拉刷新功能

小程序提供了这个事件。 onPullDownRefresh() 监听用户下拉刷新事件。 如果要开启下拉刷新功能,要先到json配置: "enablePullDownRefresh":true 配置后下拉有反应了但是没有加载效果,在onP...

oixan__
50分钟前
2
0
springmvc java对象转json,上传下载(未完)拦截器Interceptor以及源码解析(未完待续)

package com.atguigu.my.controller;import java.util.Collection;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Contr......

architect刘源源
今天
29
0
[日更-2019.5.24、25、26] Android系统中的Binder通信机制分析(一)--servicemanager

声明 其实对于Android系统Binder通信的机制早就有分析的想法,记得去年6、7月份Mr.Deng离职期间约定一起对其进行研究的,但因为我个人问题没能实施这个计划,留下些许遗憾... 最近,刚好在做...

Captain_小馬佩德罗
昨天
24
0
聊聊dubbo的DataStore

序 本文主要研究一下dubbo的DataStore DataStore dubbo-2.7.2/dubbo-common/src/main/java/org/apache/dubbo/common/store/DataStore.java @SPI("simple")public interface DataStore { ......

go4it
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部