Task和Back Stack
Task:为了完成统一的操作与用户交互的多个activity的集合
Back Stack:用来存储同一个task中activity stack栈结构 后进先出
Activity的启动模式 启动模式:activtiy启动后在回退栈中如何进行管理
<Activity android:lauchMode=""></Activity>
standard 标准启动模式 默认启动模式
standard启动模式下 会按照activity的启动的顺序依次创建activity的实例并且压入到回退栈中
SingleTop 栈顶唯一 单顶模式
SingleTop启动模式下 启动一个activity的实例时 如果发现回退栈的顶端是该activit的实例 将复用该实例不再重新创建实例压如栈中
如果需要避免某个activity被重复多次启动时 可以设置为singleTop 系统短信界面
singleTask 栈内唯一
singleTask启动模式下 启动一个activity实例时 检查回退栈中是否存在该activity的实例 如果实例存在 回退栈中会清除
该activity实例以上所有的activity的实例
如果存在比较耗费系统资源的activity时建议使用singleTask启动模式
singleInstance 单独的回退栈中的单一的实例
singleInstance启动模式下 启动一个activity的实例时 会将当前的activity存储到一个单独的回退栈中作为单一的实例
如果用户与该activtiy交互时 表示该activity所在的回退栈处于前端
singleInstance一般适用于需要系统中只存在一个实例的场景 例如:android中来电
Intent的属性
Intent 意图
作用
1.激活组件 启动组件 Activity BroadCastReceiver service
2.传递数据
3.根据action标记的特征动作 启动系统界面 例如:拨打电话 发送短信 发送邮件 打开网页
Intent中的属性
1.ComponentName 组件名 类类型 组件名表示全类名 包名.类名
设置组件名 setComponent() setClass() setClassName()
获取组件名 getComponent()2.Action 字符串类型的变量 对组件特征动作的描述 用字符串标示类能干什么
系统提供的aciton字符串 自定义action
设置 action setAction()
获取action getAction()3.Data 数据 uri类型 一般与action结合到一起使用 表示aciton动作执行的数据资源
URI(统一资源标示符) 资源数据需要通过uri标示符进行标示
uri数据资源中包括两部分 数据资源 数据类型 MIMEType
scheme://host:port/path
sms://10086 tel://10086
setData() setType() setDataAndType() 设置数据
getData() getType() 获取数据4.Category 字符串类型 分类
addCategory() 设置分类
removeCategory() 移除分类
getCategory() 获取分类5.Extra 额外信息 使用Intent意图对象进行启动组件时传递数据
6.flag 标记 int类型
用来标记回退栈中的activity 提供常量可以设置activity的启动模式
setFlags() 设置标记
getFlags() 获取标记
Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); singleTask
startActivity(intent);
显式 隐式启动:
根据activtiy的启动方式将activity划分为两类 一类是隐式activity 显式activity
不管哪种形式启动activity都是用的是Intent意图对象
显式activity 使用Intent启动activity时明确指定启动activity的组件名称 一般适合使用在同一个app中多个activity之间的启动
隐式activity 使用Intent启动activity时并未明确指定组件名称 而是指定组件的特征
一般适合使用不同的app中activity之间的启动
Intent intent=new Intent("action");
startActivity(intent);
<Activity android:name="acivity的包名.类名">
<Intent-filter>
<action android:name="action"/> action标签必须存在 并且可以是一个列表 只要有一个aciton的取值与Intent对象中一致就可以启动
.....
<category android:name="android.intent.categoty.DEFAULT">
只要隐式启动activity categroy就会被设置为默认
</Intent-filter>
</Activity>
UI线程模型
应用程序启动时,系统会在应用程序中创建一个线程执行当前启动的应用程序组件 ,这个线程称为主线程(Main Thread)
主线程非常重要,因为它主要负责UI界面的绘制以及ui界面事件的处理,main线程主要负责UI工具包(android.widget
android.view)中的操作 所以主线程也被称为UI线程。
如果UI线程中执行的耗时操作过多时,会造成UI线程的阻塞,如果阻塞超过5秒钟就会出现ANR(application not responding)
为了分担UI线程的工作 可以将耗时操作放到工作线程中执行 但是一般情况下耗时操作的结果都需要展示到Ui界面中 如果在工作线程中
访问ui工具包中的内容时会报错
android中单一线程模型(只能UI线程访问UI工具包中的类)
1.UI线程不能阻塞
2.工作线程不能操作UI工具包