Activity、Fragment和Intent
1、建立、配置和使用Activity
·创建Activity的要点
①创建一个Activity需要实现一个或多个方法
必须复写onCreate()方法,该方法会在Activity创建时被回调
②每一个Activity都需要在AndroidManifest.xml文件当中进行配置;
·配置Activity
配置Activity 时通常指定如下几个属性:
name: 指定该Activity 的实现类的类名。
icon: 指定该Activity 对应的图标。
label: 指定该Activity 的标签。
exported: 指定该Activity 是否允许被其他应用调用。
launchMode: 指定该Activity 的加载模式, 该属性支持standard 、
singleTop 、singleTask 和singlelnstance 这4 种加载模式。
·启动、关闭Activity
Activity 启动其他Activity 有如下两个方法:
① startActivity(Intent intent): 启动其他Activity 。
② startActivityForResult(ntent intent, int requestCode): 以指定的请求码( requestCode )启动Activity , 而且程序将会获取新启动的Activity 返回的结果(通过重写onActivityResult(…)方法来获取)。
Android 为关闭Activity 准备了如下两个方法:
① finish(): 结束当前Activity 。
② finishActivity(int requestCode) : 结束以startActivityForResult(lntent intent, int requestCode)方法启动的Activity 。
2、Activity 的生命周期与加载模式
·Activity 的生命周期,Activity 大致会经过如下4 种状态。
① 运行状态:当前Activity 位于前台,用户可见, 可以获得焦点。
② 暂停状态:其他Activity 位于前台, 该Activity 依然可见, 只是不能获得焦点。
③ 停止状态:该Activity 不可见,失去焦点。
④ 销毁状态:该Activity 结束,或Activity 所在的进程被结束。
·在Activity 的生命周期中,如下方法会被系统回调。
onCreate(Bundle savedStatus):创建Activity 时被回调->onStart(): 启动Activity 时被回调->onRestart(): 重新启动Activity 时被回调->onResume() : 恢复Activity 时被回调->onPause(): 暂停Activity 时被回调->onStop(): 停止Activity 时被回调->onDestroy(): 销毁Activity 时被回调。
·Activity的4种加载模式
standard: 标准模式,这是默认的加载模式。
singleTop : Task 栈顶单例模式。
singleTask: Task 内单例模式。
singlelnstance: 全局单例模式。
3、Fragment详解
·Fragment的特征
① Fragment总是作为Activity界面的组成部分。Fragment可调用
getActivity()方法获取它所在的Activity,Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法来获取Fragment。
② 在Activity运行过程中,可调用FragmentManager的add()、remove()、replace()方法动态地添加、删除或替换Fragment。
③ 一个Activity可以同时组合多个Fragment;反过来,一个Fragment也可被多个Activity复用。
④ Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。
·Fragment 管理与Fragment 事务
Activity 管理Fragment 主要依靠FragmentManager。FragmentManager
可以完成如下几方面的功能:
①使用findFragmentByld()或findFragmentByTag()方法来获取指定Fragment 。
②调用popBackStack()方法将Fragment 从后台栈中弹出(模拟用户按下BACK 按键)。
③调用addOnBackStackChangeListener()注册一个监听器, 用于监听后台栈的变化。
④如果需要添加、删除、替换Fragment, 则需要借助于FragmentTransaction 对象,FragmentTransaction 代表Activity 对Fragment 执行的多个改变。
FragmentTransaction也被翻译为Fragmentation事务。与数据
库事务代表了对底层数组的多个更新操作;而Fragment 事务则代
表了Activity对Fragment 执行的多个改变操作。
·Fragment生命周期
与Activity 类似, Fragment 也存在如下状态。
运行状态: 当前Fragment 位于前台,用户可见,可以获得焦点。
暂停状态: 其他Activity 位于前台,该Fragment 依然可见,只是不能获得焦点。
停止状态: 该Fragment 不可见, 失去焦点。
销毁状态: 该Fragment 被完全删除, 或该Fragment 所在的Activity
被结束。
4、Intent属性、过滤器和传递数据
·Intent对象简述
①android 的应用程序包含三种重要组件:Activity、Service、
BroadcastReceiver,应用程序采用了一致的方式来启动它们——都是依靠 Intent 来启动的,Intent 就封装了程序想要启动程序的意图。不仅如此,Intent 还可用于与被启动组件交换信息。
使用 Intent 启动不同组件的方法
Activity :
startActivity(Intent intent)
startActivityForResult(Intent intent,int requestCode)
②Intent 对象大致包含 Component、Action、Category、Data、Type、Extra 和 Flag 这 7 种属性
③其中 Component 用于明确指定需要启动的目标组件,而 Extra 则用于“携带”需要交换的数据
·Intent的属性及intent-filter配置
①Component属性
Intent 的 Component 属性需要接受一个 ComponentName 对象;
指定 Component 属性的 Intent 已经明确了它将要启动哪个组件,因此这种 Intent 也被称为显式 Intent,没有指定 Component 属性的 Intent 被称为隐式 Intent;
隐式 Intent 没有明确指定要启动哪个组件,应用将会根据 Intent 指定的规则去启动符合条件的组件,但具体是哪个组件则不明确。
②Action、Category 属性与 intent-filter 配置
Action 要完成的只是一个抽象动作,这个动作具体由哪个组件(或许是
Activity,或许是 BroadcastReceiver)来完成,Action 这个字符串本身并不管。
< action…/ >、< category…/ >子元素的配置非常简单,它们都可以指定android:name 属性,该属性的值就是一个普通的字符串。
③指定Action、Category调用系统Activity
Intent 代表了启动某个程序组件的“意图”,实际上 Intent 对象不仅可以启动本应用内程序组件,也可以启动 android 系统的其他应用程序组件,包括系统自带的程序组件——只要权限允许。
④ Data、Type 属性与 intent-filter 配置
Data 属性通常用于向 Action 属性提供操作的数据。
Data 属性与 Type 属性的关系比较微妙,这两个属性会互相覆盖,如果希望 Intent 既有 Data 属性,也有 Type 属性,则应该调用
Intent 的 setDataAndType()方法。
⑤Intent 的 Extra 属性通常用于在多个 Action 之间进行数据交换,Intent 的Extra 属性值应该是一个 Bundle 对象,Bundle 对象就像一个 Map 对象,它可以存入多个 key-value 对,这样就可以通过Intent 在不同 Activity之间进行数据交换了。
⑥latent 的Flag 属性用于为该Intent 添加一些额外的控制旗标, Intent 可调用addFlags()方法来添加控制旗标。