Android 常用组件界面组件(一)| 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第三天
界面组件
| 界面组件 | 说明 | |
|---|---|---|
| 1.1 | Activity | 界面容器 |
| 1.2 | fragment | 轻量级界面容器 |
| 1.3 | service | 后台服务 |
| 1.4 | broadcast | 广播组件 |
| 1.5 | ContentProvider | 数据组件 |
| 1.6 | Intent | 意图组件 |
1.1 Activity
Activity生命周期
- onCreate(): 创建时回调,一般在此处创建视图和绑定数据。
- onStart(): 已启动,即将进入前台。
- onResume(): 与用户开始交互,位于Activity栈顶
- onPause():Activity失去焦点或已暂停,Activity界面部分课件,下一个生命周期是onResume()或onStop()
- onStop():Activity不再可见,下一个回调是OnRestart()或OnDestory()
- OnDestory():销毁activity,释放该Activity的所有资源
- OnSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据
- onRestoreInstanceState()/ onCrate():用于恢复数据
配置改变场景
- 销毁:Resumed-onSaveInstanceState()-onPause() - onStop() - onDestroy()
- 重建: onCreate() - onStart() - onRestoreInstanceState() - onResume()
配置改变不重建Activity:AndroidManifest中配置Activity节点的configChange属性
- local:语言改变
- fontScale: 字体大小改变
- orlentation: 旋转屏幕
- keybordHidden:键盘显示隐藏
配置改变:
onConfigurationChanged()
启动模式
- standard :默认模式,允许重复
- singleTop:不允许重复
- singTask: 不允许同个栈内重复
- singleInstance:整个系统不允许重复
1.2 fragment
基本用法
- 创建Fragment布局文件
- 创建Fragment子类,加载布局文件
- Activity 加载Fragment 3.1 静态加载:布局中绑定 3.2 动态加载: FragmentManager加载
生命周期
| Fragment生命周期 | |
|---|---|
| onAttach() | Fragment 和 Activity建立关联时调用 |
| onCreateView() | 当Fragment 创建视图时调用 |
| onActivityCreated() | Activity 的onCreate()方法已返回时调用 |
| onDestroyView() | 当Fragment中的视图被移除时调用 |
| onDetach() | Fragment 和Activity取消关联时调用 |
-
启动:onAttach() - onCreate() - onCreateView()-onActivityCreated() - onStart() - onResume()- Resumed
-
退出: Resumed - onPause() - onStop() - onDestoryView()-onDestory()-onDetach()
-
部分覆盖:Resumed - onPause() - Paused
-
部分遮挡恢复:Paused - onResume() - Resumed
-
完全覆盖:Resumed - onPause() - onStop() - onDestroyView()
-
完全遮挡恢复:onCreateView() - onActivityCreated() -onStart() - onResume() - Resumed
注:Fragment生命周期可通过FragmentTransaction.setMaxLifecycle()手动干预
Fragment 与 Activity 交互
组件获取
1 Fragment获取Activity中的组件: getActivity().findViewByld(R.id.xxx)
2 Activity获取Fragment中的组件: getFragmentManager.findFragmentByld(R.id.fragment_xx)
数据传递
1 Activity传数据给Fragment: setArguments(Bundle bundle)
2 Fragment传数据给Activity:
a通过对象直接传递((方法调用/接口调用)
b通过viewmodel / handler / broadcast / eventbus等通信