Intent 显式/隐式 启动Activity基础知识

1.作用

作为启动 Activity 和Service 组件的信使(包括应用内和应用外组件),传递可序列化数据,这篇主要讲启动Activity

2.分类

  1. 显式Intent
    a.例子:Intent intent = new Intent(Context context,Class cls);
    Intent 显式/隐式 启动Activity基础知识_第1张图片
    intent的几种创建方式

    b.一般用于启动应用内的Activity
  2. 隐式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.传递数据

Intent 显式/隐式 启动Activity基础知识_第2张图片

4.注意事项

1.如果要通过隐式 Intent 启动其他应用的 Activity 时(比如要启动手机系统自带相机拍照时),需先调用(intent.resolveActivity(PackageManager) != null) 或者通过List 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的方法。

  1. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
  2. 在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,而进程包括的应用的所有运行代码和对象


    Intent 显式/隐式 启动Activity基础知识_第3张图片

你可能感兴趣的:(Intent 显式/隐式 启动Activity基础知识)