这是我参与「第四届青训营 」笔记创作活动的的第4天
客户端基础知识必备
本堂课内容
- 基础组件
- 通信组件
知识点介绍
Android基础组件
界面组件 Activity & Fragment
Activity
是什么?界面容器
注册->布局->绑定三步走
生命周期
部分遮挡
遮挡onPause()
恢复onResume()
全遮挡
关键生命周期
如果是绑定数据,在onCreate中进行。
其他关键生命周期:onStart,onResume,onStop等
配置改变场景
配置改变不重建Activity:AndroidManifest中配置Activity节点中的configChange属性
如果不改变配置,则有些场景会首先销毁再重造,例如旋转屏幕
启动模式
若不配置启动模式,则为standard模式,是允许重复的模式
若配置启动模式为singleTop,则不允许连续重复
若配置启动模式为singleTask,则不允许同个栈内重复
若配置启动模式为singleInstance,则整个系统内不允许重复
小结
启动退出的生命周期很重要,其中onCreate中需要绑定布局,数据等操作,故需要注意。
许多系统中无法走到onDestroy()这一步,故保存数据等步骤需要在onPause()或onDestroy()这一步中进行
Fragment
为了解决页面碎片化,安卓给出的解决方案是Fragment。
平时使用的目的,达到速度快,组件分离的目的。
平常一般使用androidx.fragment包
生命周期
一般与Activity的生命周期对应
与Activity进行交互
组件获取
数据传递
服务组件
没有界面的任务由Service组件来构成
基本用法
- 注册:在AndroidManifest中使用<service../>标签注册
- 创建:建立响应的Service实现类
- 加载:startService
生命周期
- onStart
- onBind,绑定数据
- onCreate,初始化
- onDestroy,销毁
与Activity通信
广播组件
有系统事件需要通知给所有应用
静态广播
动态广播
注册:Context.registerReceiver()
数据组件
生产者和消费者模式
A
通信组件
Handler
处理线程之间通信,明确处理的是主线程之间的通信的
核心原理:
操作队列,有一个looper,在不停的循环,每次拿到一个Message都会提交给Handler,本质就是一个MassageQueue
Binder
Binder只需要一次数据拷贝即可实现,效率比IPC更高
为什么不使用共享内存?进程之间的通信数据不可共享
核心原理:
所有的Binder是依靠Binder驱动来运行的,存在ServiceManager进程来进行操作。
Q:为什么在AMS通知Zygote进程使用Socket通信
A:由于Binder通信是需要多线程操作的,且Zygote会fork一个进程。而Linux中,fork进程是不推荐fork多线程的进程,因为锁的存在,会导致异常。
课后个人总结
本节课主要叙述了安卓客户端的基础知识,包括基础组件和通信组件。经过整理反思后有以下几点想法:
- 安卓开发中,组件可以说是摩天大楼的底层,这些花样繁多的组件需要在宏观上了解他们,才可以在开发的过程中做到运用合适的组件
- 要熟练地掌握不同安卓版本下的差异,例如本次课中提及到的Activity的生命周期的问题,如果在低版本中,就需要做到版本适配的问题,考虑到高版本中没有的特性,在开发中需要着重注意这一点。
- 要使用好开发手册,例如本次课中关于Activity与Fragment的部分,在课下的时候也翻阅了一些关于他们的信息,了解到了更多的知识