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

80 阅读3分钟

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

课程主要内容

基础组件

  • Activity
  • Fragment
  • Service
  • BroadcastReceiver
  • ContentProvider
  • Intent

通信组件

  • Handler
  • Binder

1、Android基础组件

 Activity (界面容器)

Activity是用于展示数据,实现与用户的交互的容器。

Activity是Android程序的前台交互、程序入口、布局容器。

Activity基本用法

注册 ——>布局 ——>绑定

Activity生命周期

  • onCreate():创建时回调,一般在此处创建视图和绑定数据
  • onStart():已启动,即将进入前台
  • onResume():与用户开始交互,位于Activity栈顶
  • onPause():Actvity失去焦点或已暂停,Activity界面部分可见,下一个生命周期是onResume()或onStop()
  • onStop():Activity不再可见,下一个回调是onRestart()或onDestory()
  • onRestart():重启已停止的Activity,下一个回调是onStart()
  • onDestory():销毁Actvity,释放该Activity的所有资源
  • onSaveInstanceState():在非正常关闭时回调,用于保存数据,不支持持久化数据
  • onRestoreInstanceState() / onCreate():用于恢复数据

image.png

配置改变场景

1.销毁: Resumed - onSaveInstanceState() - onPause() - onStop() - onDestory()

2.重建: onCreate() - onStart() - onSaveInstanceState() - onResume()

配置改变不重建Activity: AndroidManifest中配置Activity节点的congfiChange属性

local:语言改变

fontScale:字体大小改变

orientation:旋转屏幕

keyboardHidden:键盘显示隐藏

配置改变: onConfigurationChanged()

  • Activity启动模式

  • Standard 启动模式

默认模式,允许Activity重复

  • SingleTop 启动模式

栈顶复用,不允许Activity连续重复

  • SingleTask 启动模式

栈内复用,不允许同个栈内Activity重复

  • SingleInstance 启动模式

全局复用,整个系统不允许Activity重复

Fragment (轻量级页面容器)

解决屏幕尺寸碎片化问题,速度快。

Fragment生命周期

Fragment 的生命周期和 Activity 相似

image.png

与Activity交互

  • 组件获取
  • 数据传递

Service (后台服务)

Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。

基本用法

  1. 注册:在AndroidManifest中使用<service../>标签注册
  2. 创建:建立响应的Service实现类
  3. 加载:startService() / bindService()

生命周期

  • onStart()
  • onBind()
  • onCreate()
  • onDestory()

与Activity通信

Broadcast (广播组件)

  • 静态广播
  1. 注册:AndroidManifest中使用<receiver../><intent-filter.../>
  2. 创建:建立相应的BroadcastReceiver实现类
  3. 接收:在步骤2类onReceive()中接收广播
  4. 发送:ontext.sendBroadcast()
  • 动态广播

注册:Context.registerReceiver()

ContentProvider (数据组件)

  • 生产者
  • 消费者

Intent (意图组件)

  1. 显式Intent

setComponent / setClass指定具体类

  1. 隐式Intent

Action(动作)

Data(数据)

ategory(类别)

Type(数据类型)

Component(组件)

Extra(扩展信息)

Flag(标志位)

2、Android通信组件

Handler(线程通信)

基本用法

1创建:新建Handler,实现handleMessage(Message)

2构造Message: what / setData()

3发送:子线程调用Handler.sendMessage(Message)发送Message

4处理:在Handler的handleMessage(Message msg)主线程更新UI

核心原理

image.png

Binder(进程通信)

Binder只需一次内存交换

基本用法

服务端
  • 定义一个AIDL文件
  • 实现描述的接口,编写service
  • 如果有实体类,需要提供实体类(jar包形式)
客户端
  • 拿到AIDL文件
  • 绑定服务,获得接口持有对象

核心原理

image.png

image.png

后记

本节课主要讲了Android客户端的基础知识:Android基础组件与Android通信组件。

我也学习了认知方法:What ——> Why ——> How

什么是程序?

开发者视角: 代码+资源——改变世界——知识+经验

用户视角: 界面、互动、记忆——工具、视频、游戏——应用商店、搜索引擎、官网下载……