Intent对象是component用来与操作系统通信的一种媒介工具。
作用原理
当需要从一个Activity启动另一个Activity时,一般做法是在按钮的监听器中创建一个Intent对象,传入另一个Activity参数,然后调用startActivity(Intent)方法发送请求给操作系统的ActivityManager,
ActivityManager负责创建Activity实例并调用其onCreate(…)方法。下图演示了QuizActivity通过Intent对象来启动了CheatActivity
在《Android编程权威指南》中的GeoQuzi中一共创建了两个Intent对象分别传递 EXTRA_ANSWER_IS_TRUE 和 EXTRA_ANSWER_SHOWN 两个数据。
具体流程为 在QuziActivity中用户按下“作弊”按钮,onClick(View)被调用,通过starActivityForResult(...)来传Intent对象,其中可以加入requestCode参数来作为父Activity的标志,然后ActivityManager把Intent传给CheatActivity(子Activity),在CheatActivity中用户按下"显示答案"按钮,setResult(..)被调用打包Intent对象,当用户按下后退按钮时,子Activity从Activity栈中销毁,并把Intent通过ActivityManager来传给QuizActivity,并通过onActivityResult(...)来传递requestCode,resultCode,以及Intent对象。至此,两个Activity之间的通信完成。
注意:当中的requestCode 用于标记父Activity,因为requestCode是由父Activity来设置的。
requestCode 用于记录用户以何种方式返回父Activity 主要包括 RESULT_OK(按钮返回) RESULT_CANCELED(按返回键) RESULT_FIRST_USER(用户自定义常量)
显式与隐式Intent
显式Intent,同一应用里的Acitivity之间使用显式Intent来启动Activity
隐式Intent,一个应用的Activity如需启动另一个应用的Activity则可通过创建隐式Intent来处理。