1.作用
作为启动 Activity 和Service 组件的信使(包括应用内和应用外组件),传递可序列化数据,这篇主要讲启动Activity
2.分类
- 显式Intent
a.例子:Intent intent = new Intent(Context context,Class<Activity> cls);
intent的几种创建方式
b.一般用于启动应用内
的Activity- 隐式Intent
a.例子:Intent intent = new Intent(String action,Uri uri);
b.一般用于启动应用外
的Activity,操作系统会自动把匹配隐式Intent的Acttivity显
示出来供用户选择,匹 配的规则跟Activity声明的 Intent-filter 有关
c.主要组成部分:
(1)action 要执行的操作。也可以通过 setAction() 设置
(2)uri待访问数据的位置。也可以通过 setData() 和 setDataAndType() 设
置。可以是网页的URL,某个文件的,或指向 ContentProvider 的某个内容 URI
(3)操作涉及的的数据类型。setType() 和 setDataAndType()设置。如intent.setType("text/html")
(4)可选类别。描述何时,何地或者如何启动某个 Activity。
intent.addCategory(Intent.CATEGORY_LAUNCHER)
3.传递数据
4.注意事项
1.如果要通过隐式 Intent 启动其他应用的 Activity 时(比如要启动手机系统自带相机拍照时),需先调用
(intent.resolveActivity(PackageManager) != null) 或者通过List<ResolveInfo> allMatchesPackageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
判断手机中是否有能够响应这个Intent的Activity的应用2.类别 DEFAULT 在调用 StartActivity() 和 StartActivityForResult() 时自动添加到隐式 Intent 中,不用通过 addCategory() 方法设置也会有
5.知识扩展--任务
1.概念:任务是一个 Activity 栈,android 系统用任务来跟踪用户的状态,通过默认启动器打开的应用都有自己的任务。位于栈底的 Activity 通常称为基Activity,当用户看到的是基Activity时按返回键就会回到桌面主屏幕。
2.表现:一般打开应用内或应用外的新 Activity 都会处在当前应用的任务中。
3.在新任务中启动 Activity的方法。
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- 在Lillipop设备上,对于类别为 SEND 或 SEND_MULTIPLE 启动的 Activity,会创建独立的新任务,在这之前的设备不会。在Lillipop设备上想启动多任务可以给Intent添加
Intent.FLAG_ACTIVITY_NEW_DOCUMENT 或在androidManifest中的activity标签声明:android:documentLaunchMode = “intoExiting”
。但是通过用这个方式启动,发送的数据和已有的任务相同的Intent不会启动新的任务。如果想要在任何时候都启动新任务:同时添加FLAG_ACTIVITY_NEW_DOCUMENT 和FLAG_ACTIVITY_MUTIPLE_TASK 或者 documentLaunchMode = “always”
6.知识扩展--进程
1.概念:进程是操作系统创建的,供应用对象生存和应用运行的地方。一个进程需要一个虚拟机来运行。
2.进程和任务区分:
- 同:每个Activity都只与一个进程和一个任务相关联。这是进程和任务的唯一相似之处
异:任务只包含Activity,而进程包括的应用的所有运行代码和对象
网友评论