客户端基础知识必备 | 青训营笔记

94 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第4天

客户端基础知识必备

本堂课内容

  1. 基础组件
  2. 通信组件

知识点介绍

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组件来构成

基本用法
  1. 注册:在AndroidManifest中使用<service../>标签注册
  2. 创建:建立响应的Service实现类
  3. 加载:startService
生命周期
  1. onStart
  2. onBind,绑定数据
  3. onCreate,初始化
  4. 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多线程的进程,因为锁的存在,会导致异常。

课后个人总结

本节课主要叙述了安卓客户端的基础知识,包括基础组件和通信组件。经过整理反思后有以下几点想法:

  1. 安卓开发中,组件可以说是摩天大楼的底层,这些花样繁多的组件需要在宏观上了解他们,才可以在开发的过程中做到运用合适的组件
  2. 要熟练地掌握不同安卓版本下的差异,例如本次课中提及到的Activity的生命周期的问题,如果在低版本中,就需要做到版本适配的问题,考虑到高版本中没有的特性,在开发中需要着重注意这一点。
  3. 要使用好开发手册,例如本次课中关于Activity与Fragment的部分,在课下的时候也翻阅了一些关于他们的信息,了解到了更多的知识

References

android中AMS通知Zygote去fork进程为什么使用socket而不使用binder?