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

120 阅读2分钟

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

课堂笔记

概述

  • 基础组件
    • Activity
    • Fragment
    • Service
    • BroadcastReceiver
    • ContentProvider
  • 通信组件
    • Handler
    • Binder

1 Android基础组件

1.1 Activity

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

Activity 生命周期

image.png Activity常见的四种生命周期状态如下:

    1. Active 运行状态
    1. Pause 暂停状态
    1. Stop 停止状态
    1. Killed 消亡状态

Activity 必须在 AndroidMainfest.xml 中注册

Activity 是四大组件之一, Android 规定四大组件必须在 AndroidMainfest.xml 中注册, Activity如果不注册,则会引起 App Crash 报错。

启动 Activity 的方法

显示启动

Intent intent = new Intent(ActivityMethods.this, OtherActivity.class)
startActivity(intent);

隐式启动

Intent intent = new Intent("string_action");
// intent.setAction("string_action");
startActivity(intent);

Activity 启动模式

  • Standard 启动模式
  • SingleTask 启动模式
  • SingleTop 启动模式
  • SingleInstance 启动模式

image.png

1.2 Fragment

基本用法

Fragment 表示 FragmentActivity 中的行为或界面的一部分。可以在一个 Activity 中组合多个片段,从而构建多窗格界面;也可以在多个 Activity 中重复使用某个片段。可以将 Fragment 视为 Activity 的模块化组成部分。

  1. 生成 Fragment
  2. 将 Fragment 添加到 Activity
  3. 在运行过程中操作 Fragment

生命周期

image.png

image.png

1.3 Service

Service组件可以在后台一直运行而不提供用户界面。可由其他组件创建或启动,即便用户切换到其他任务,Service仍然可以在后台一直运行。此外,组件可以绑定到 Service ,进行交互,甚至执行进程间通信(IPC)。

生命周期

image.png

1.4 Broadcast

Broadcast Receiver类型:

  • 标准广播
  • 有序广播 注册方式:
  • 静态注册
  • 动态注册 发送标准广播:
        Intent intent=new Intent("android.intent.broadcasttest.MY_BROADCAST");
        sendBroadcast(intent);
    }

发送有序广播:

    Intent intent = new Intent("android.intent.broadcasttest.MY_BROADCAST");
    sendOrderedBroadcast(intent, null);
}

1.5 ContentProvider

ContentProvider 属于 Android 的四大组件之一,基于 Android 中的Binder 机制实现。主要应用于进程间数据传输。

  • 1.创建一个DBHeler类继承自SQLiteOpenHelper。
  • 2.创建MyProvider继承自ContentProvider
  • 3.创建MyObserver继承自ContentObserver
  • 4.最后在调用ContentProvider打印出DB数据库的数据

1.6 Intent

1 显式Intent

  • setComponent / setClsaa 指定具体类

2 隐式Intent

  • Action(动作)
  • Data(数据)
  • Category(类别)
  • Type(数据类型)
  • Component(组件)
  • Extra(扩展信息)
  • Flag(标志)

image.png

2 Android 通信组件

2.1 Handler

核心原理:

image.png

2.2 Binder

服务端

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

核心原理:

image.png

2.3 通信组件总结

image.png

个人思考与总结

什么是程序?

开发者视角:

  • What:代码+资源
  • Why:改变世界
  • How:知识+经验

用户视角:

  • What:界面 互动 记忆
  • Why:工具 视频 游戏
  • How:应用商店 搜索引擎

Activity

What:

  • 界面容器

Why:

  • 前台交互
  • 程序入口
  • 布局容器

为什么使用Fragment

  • 碎片化
  • 速度快

image.png