这是我参与「第四届青训营 」笔记创作活动的第10天
Android基础组件
界面组件
Activity & Fragment
Fragment
基本用法
-
What:
- 一个轻量级的“子Activity”;
- 用来表示Activity中的行为或用户界面的部分;
- 一个具有自己生命周期的控件;
- 依赖于Activity存活,并可以被多个Activity复用。
-
Why:
- 模块化(Modularity):将Activity中的多个子界面分散到不同的Fragment中完成。
- 可重用(Reusability):多个Activity可复用同一个Fragment。
- 可适配(Adaptability):根据屏幕尺寸、方向展示不同的布局。
-
How:创建布局文件 -> Fragment中绑定布局 -> Activity中加载Fragment
生命周期
-
介绍:
onAttach():Fragment和Activity建立关联时调用。onCreateView():当Fragment创建视图时调用。onActivityCreated():Activity的onCreate()方法已返回时调用。onDestroyView():当Fragment中的视图被移除时调用。onDetach():Fragment和Activity取消关联时调用。
-
场景:
-
启动退出:
- 启动:
onAttach()->onCreate()->onCreateView()->onActivityCreated()->onStart()->onResume()-> Resumed - 退出:Resumed ->
onPause()->onStop()->onDestroyView()->onDestroy()->onDetach()
- 启动:
-
部分遮挡:
- 遮挡:Resumed ->
onPause()-> Paused - 恢复:Paused ->
onResume()-> Resumed
- 遮挡:Resumed ->
-
完全遮挡:
- 遮挡:Resumed ->
onPause()->onStop()->onDestroyView() - 恢复:
onCreateView()->onActivityCreated()->onStart()->onResume()-> Resumed
- 遮挡:Resumed ->
-
使用FragmentTransaction.setMaxLifecycle()可控制Fragment的最大生命周期
与Activity交互
-
组件获取:
- Fragment获取Activity组件:
getActivity().findViewById(R.id.xxx) - Activity获取Fragment组件:
getSupportFragmentManager().findFragmentById(R.id.fragment_xxx)
- Fragment获取Activity组件:
-
数据传递:
-
Fragment传数据给Activity:
- 通过对象调用(方法/接口)
- 通过ViewModel/Handler/Broadcast/EventBus等通信
-
Activity传数据给Fragment:
setArguments(Bundle bundle)
-
服务组件
Service
基本用法
-
What:可以在后台执行长时间运行操作,而不提供用户界面的应用组件。
-
Why:确保应用程序可以在后台保持运行,以便用户可以同时操作多个应用程序。
-
How:
- 注册:
AndroidManifest中使用<service />标签。 - 创建:建立相应的Service类。
- 加载:
startService()/bindService()。
- 注册:
生命周期
onStart()onBind()onCreate()onDestroy()
与Activity通信
- 通过Binder类的
getService()方法返回Service对象。 - 通过Service类的
onBind()方法返回Binder对象。 - 通过ServiceConnection对象实现的
onServiceConnected()方法获取Service实例。 - 通过Activity的
bindService()方法绑定服务。 - 通过Activity的Service实例直接通信。