Android进阶指北

Android进阶指北
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者:
2020-09
版次: 1
ISBN: 9787121393754
装帧: 其他
开本: 16开
纸张: 胶版纸
页数: 484页
字数: 642千字
40人买过
  • 本书是一本Android进阶图书,结合《Android进阶之光》和《Android进阶解密》两本书介绍的知识,一同建立起Android应用开发进阶知识体系。全书共分13章,主要从3个方面来组织内容:(1)Android应用开发所需要掌握的系统源码知识,包括系统源码的下载、编译、调试,包管理机制,输入系统,Native Binder,Java Binder;(2)应用开发必需的知识点,包括Groovy基础、Gradle核心思想、Gradle的Android插件、Android Jetpack架构组件;(3)与跨平台开发相关的知识点,包括跨平台技术演进、Dart基础、Flutter基础。
      本书适合有一定基础的Android应用开发工程师和对Android系统源码感兴趣的读者阅读。 刘望舒,Android技术专家,Android进阶三部曲《Android进阶之光》 《Android进阶解密》 《Android进阶指北》作者,电子工业出版社博文视点2017、2018、2019年度优秀作者。CSDN知名博主,荣获CSDN 2018年度博客之星称号。GDG Devfest、Droidcon、安卓巴士开发者大会、全球移动开发者大会的特邀演讲嘉宾或出品人。曾在多个知名大厂任职,目前就职于某大型互联网公司,担任技术负责人,负责管理和架构相关工作。 Android进阶三部曲知识体系 1

    第1章 系统源码的下载、编译、调试 5

    1.1 使用VirtualBox安装Ubuntu 5

    1.1.1 安装Ubuntu的步骤 6

    1.1.2 安装增强工具 12

    1.2 AOSP源码下载 14

    1.2.1 AOSP简介 14

    1.2.2 下载repo 15

    1.2.3 下载源码 15

    1.3 内核源码下载 16

    1.4 系统源码的整编和单编 18

    1.4.1 编译系统概述 18

    1.4.2 编译源码的方式 20

    1.4.3 准备编译环境 20

    1.4.4 源码整编 21

    1.4.5 源码单编 24

    1.5 Source Insight导入系统源码 25

    1.5.1 新建源码项目 25

    1.5.2 定位文件 27

    1.5.3 全局搜索 28

    1.6 Android Studio导入系统源码 29

    1.7 Android Studio调试系统源码 33

    1.7.1 AOSP源码项目调试 34

    1.7.2 导入部分源码调试 38

    1.7.3 新建Android项目调试 39

    1.8 本章小结 40

    第2章 理解包管理机制和PMS 41

    2.1 PackageInstaller的初始化 41

    2.1.1 PackageManager简介 42

    2.1.2 APK的文件结构和安装方式 42

    2.1.3 寻找PackageInstaller入口 43

    2.1.4 PackageInstallerActivity解析 47

    2.1.5 PackageInstaller初始化的过程 51

    2.2 PackageInstaller安装APK过程 52

    2.2.1 PackageInstaller中的处理 52

    2.2.2 Java框架层的处理 57

    2.2.3 PackageInstaller安装APK的过程 59

    2.3 PMS处理APK的安装过程 59

    2.3.1 PackageHandler处理安装消息 60

    2.3.2 复制APK的处理 66

    2.3.3 PMS处理APK安装 70

    2.3.4 PMS处理APK安装的步骤 76

    2.4 PMS的创建过程 77

    2.4.1 SystemServer处理部分 77

    2.4.2 PMS构造方法 80

    2.5 APK解析过程 91

    2.5.1 引入PackageParser 91

    2.5.2 PackageParser解析APK 92

    2.5.3 Package的数据结构 99

    2.6 本章小结 100

    第3章 理解输入系统和IMS 102

    3.1 输入事件传递流程的组成部分 103

    3.2 IMS的诞生 105

    3.2.1 SystemServer处理部分 105

    3.2.2 InputManagerService构造方法 107

    3.3 IMS的启动过程 110

    3.4 InputDispatcher的启动过程 112

    3.5 InputReader处理事件的过程 113

    3.6 输入事件的处理总结 119

    3.7 InputReader的加工类型 120

    3.8 InputDispatcher的分发过程 123

    3.8.1 唤醒InputDispatcherThread 123

    3.8.2 InputDispatcher进行分发 124

    3.9 事件分发到目标窗口的过程 128

    3.9.1 为事件寻找合适的分发目标 128

    3.9.2 处理点击形式的事件 132

    3.9.3 向目标窗口发送事件 135

    3.9.4 Motion事件分发过程总结 136

    3.10 本章小结 138

    第4章 IPC机制 139

    4.1 Linux和Android的IPC机制 139

    4.1.1 Linux中的IPC机制 139

    4.1.2 Android中的IPC机制 141

    4.2 开启多进程 142

    4.2.1 开启多进程举例 142

    4.2.2 开启多进程引出的问题 144

    4.3 用Messenger进行进程间通信 146

    4.4 使用AIDL实现跨进程方法调用 150

    4.4.1 创建AIDL文件 150

    4.4.2 创建服务端 152

    4.4.3 客户端调用 153

    4.5 用ContentProvider进行进程间通信 155

    4.5.1 建立数据库,方便ContentProvider使用 155

    4.5.2 使用ContentProvider对数据库进行操作 156

    4.5.3 在Activity中调用另一个进程的GameProvider方法 158

    4.6 用Socket实现跨进程聊天程序 160

    4.7 本章小结 167

    第5章 Native Binder原理 168

    5.1 学习Binder的前置知识点 168

    5.1.1 Linux和Binder的IPC通信原理 169

    5.1.2 使用Binder的原因 173

    5.1.3 学习Binder的原因 174

    5.2 ServiceManager中的Binder机制 175

    5.2.1 基于Binder通信的C/S架构 175

    5.2.2 MediaServer的main函数 176

    5.2.3 每个进程唯一的ProcessState实例 177

    5.2.4 解析ServiceManager中的Binder机制 180

    5.2.5 小结 187

    5.3 系统服务的注册过程 187

    5.3.1 从调用链角度说明MediaPlayerService的注册过程 187

    5.3.2 从进程角度说明MediaPlayerService的注册过程 195

    5.3.3 小结 196

    5.4 ServiceManager的启动过程 196

    5.4.1 打开binder设备 198

    5.4.2 注册成为Binder机制的上下文管理者 201

    5.4.3 循环等待和处理客户端发来的请求 203

    5.5 系统服务的获取过程 206

    5.5.1 客户端MediaPlayerService请求获取服务 206

    5.5.2 服务端ServiceManager处理请求 212

    5.6 本章小结 218

    第6章 Java Binder原理 219

    6.1 Java Binder的JNI注册 219

    6.1.1 Binder类的注册 223

    6.1.2 BinderInternal类的注册 224

    6.2 Java Binder中系统服务的注册过程 225

    6.2.1 将AMS注册到ServiceManager 226

    6.2.2 引出JavaBBinder 230

    6.2.3 解析JavaBBinder 232

    6.2.4 Java Binder架构 234

    6.3 本章小结 235

    第7章 Groovy基础 236

    7.1 Groovy概述 236

    7.2 Groovy编写和调试 237

    7.3 变量 237

    7.4 方法 237

    7.5 类 238

    7.6 语句 239

    7.6.1 断言 239

    7.6.2 for循环 239

    7.6.3 switch语句 240

    7.7 数据类型 241

    7.7.1 字符串 241

    7.7.2 List 242

    7.7.3 Map 242

    7.7.4 闭包(Closure) 243

    7.8 I/O操作 244

    7.8.1 文件读取 244

    7.8.2 文件写入 244

    7.9 其他 245

    7.9.1 asType 245

    7.9.2 判断是否为真 245

    7.9.3 安全取值 245

    7.9.4 with操作符 246

    7.10 本章小结 246

    第8章 Gradle核心思想 247

    8.1 Gradle概述 247

    8.1.1 项目自动化 248

    8.1.2 构建工具 248

    8.1.3 Gradle的特性 253

    8.2 Gradle基础知识 255

    8.2.1 配置Gradle环境 255

    8.2.2 实现Hello World 257

    8.2.3 Gradle的任务 258

    8.2.4 Gradle日志级别 260

    8.2.5 Gradle 命令行 261

    8.3 被忽视的Gradle Wrapper 263

    8.3.1 为什么需要Gradle Wrapper 263

    8.3.2 构建Gradle Wrapper 264

    8.3.3 配置Gradle Wrapper 265

    8.3.4 使用Gradle Wrapper 266

    8.3.5 升级Gradle Wrapper 267

    8.3.6 自定义Gradle Wrapper 268

    8.4 Gradle插件基础 268

    8.4.1 Gradle插件概述 268

    8.4.2 应用Gradle插件 270

    8.4.3 插件DSL 272

    8.4.4 自定义对象插件 273

    8.4.5 Gradle插件的作用和优点 274

    8.5 自定义Gradle插件 274

    8.5.1 在build.gradle中编写 275

    8.5.2 在buildSrc工程项目中编写 277

    8.5.3 在独立项目中编写 278

    8.6 本章小结 281

    第9章 Gradle的Android插件 282

    9.1 什么是Gradle的Android插件 282

    9.2 Android Studio的模块类型和项目视图 283

    9.3 项目build.gradle 284

    9.4 模块build.gradle 285

    9.4.1 Gradle的Android插件类型 286

    9.4.2 Android块 286

    9.4.3 dependencies块 291

    9.5 Android签名文件配置 292

    9.5.1 自定义签名信息文件 292

    9.5.2 本地添加签名信息文件 293

    9.6 Gradle的库依赖 294

    9.7 Gradle的库依赖管理 295

    9.7.1 Gradle的依赖传递 296

    9.7.2 Gradle的依赖检查 296

    9.7.3 Gradle的依赖冲突 299

    9.8 本章小结 301

    第10章 Android Jetpack架构组件 302

    10.1 Android Jetpack简介 303

    10.2 Android Jetpack分类 303

    10.2.1 Architecture 304

    10.2.2 Foundationy 305

    10.2.3 Behavior 306

    10.2.4 UI 307

    10.3 在应用中引入Jetpack相关组件 307

    10.4 使用Lifecycle 307

    10.4.1 为什么需要Lifecycle 307

    10.4.2 如何使用Lifecycle 309

    10.4.3 Lifecycle应用举例 312

    10.4.4 自定义LifecycleOwner 315

    10.5 Lifecycle的原理 316

    10.5.1 Lifecycle的生命周期状态事件和状态 316

    10.5.2 Lifecycle如何观察Activity和Fragment的生命周期 317

    10.5.3 Lifecycle关联类 327

    10.6 使用LiveData 328

    10.6.1 什么是LiveData 328

    10.6.2 LiveData的基本用法 329

    10.6.3 更改LiveData中的数据 330

    10.6.4 合并多个LiveData数据源 332

    10.6.5 拓展LiveData对象 333

    10.7 LiveData的原理 335

    10.7.1 LiveData如何观察组件生命周期变化 335

    10.7.2 LiveData的observe方法回调 336

    10.7.3 postValue/setValue方法分析 339

    10.7.4 Transformations.map方法分析 341

    10.7.5 LiveData关联类 343

    10.8 使用ViewModel 344

    10.8.1 什么是ViewModel 345

    10.8.2 ViewModel的基本使用方法 345

    10.8.3 ViewModel的生命周期 347

    10.9 ViewModel的原理 348

    10.10 本章小结 351

    第11章 跨平台技术演进 352

    11.1 Web App 353

    11.2 Hybrid App 353

    11.2.1 Cordova 354

    11.2.2 Ionic 355

    11.2.3 VasSonic 355

    11.2.4 微信小程序 356

    11.3 语言编译转换 357

    11.4 原生渲染 358

    11.4.1 React Native 358

    11.4.2 Weex 358

    11.4.3 快应用 359

    11.5 自绘UI 360

    11.5.1 Qt 360

    11.5.2 Flutter 361

    11.6 本章小结 362

    第12章 Dart基础 363

    12.1 Dart开发环境搭建 363

    12.2 Dart概述 364

    12.3 Dart的特性和重要概念 365

    12.4 Dart关键字 366

    12.5 变量 367

    12.6 基本数据类型 367

    12.6.1 Number 367

    12.6.2 String 368

    12.6.3 Boolean 368

    12.6.4 List 368

    12.6.5 Set 369

    12.6.6 Map 369

    12.7 函数 369

    12.7.1 可选参数 370

    12.7.2 默认参数值 370

    12.7.3 main函数 371

    12.7.4 匿名函数 371

    12.8 流程控制语句 371

    12.8.1 for循环 372

    12.8.2 switch和case 372

    12.9 捕获异常 373

    12.10 为类添加新的功能 373

    12.11 库的使用方法 374

    12.12 异步支持 375

    12.13 使类可调用 376

    12.14 创建实例 376

    12.15 本章小结 376

    第13章 Flutter基础 377

    13.1 Flutter开发环境搭建和Hello World 377

    13.1.1 Flutter概述 378

    13.1.2 Flutter开发环境搭建 378

    13.1.3 运行一个Flutter Demo 383

    13.1.4 Hello World 385

    13.2 Widget基础 386

    13.2.1 Widget概述 387

    13.2.2 Widget的分类 387

    13.2.3 Widget的状态分类 388

    13.2.4 根Widget的种类 388

    13.3 Basic Widget 389

    13.3.1 代码模板和主题 389

    13.3.2 文本 390

    13.3.3 图片 391

    13.3.4 凸起按钮 394

    13.3.5 其他Widget 395

    13.4 Material组件 397

    13.4.1 MaterialApp 398

    13.4.2 Scaffold 401

    13.4.3 AppBar 403

    13.4.4 BottomNavigationBar 405

    13.4.5 TabBar 407

    13.4.6 Drawer 411

    13.5 Scrolling Widget 413

    13.5.1 ListView 413

    13.5.2 GridView 418

    13.5.3 PageView 419

    13.6 手势相关Widget 421

    13.6.1 指针事件 421

    13.6.2 手势 422

    13.6.3 使用GestureDetector 423

    13.6.4 使用Dismissible 424

    13.7 资源和图片 426

    13.7.1 指定asset 426

    13.7.2 加载文本 427

    13.7.3 加载图片 430

    13.8 布局Widget 433

    13.8.1 线性布局Widget 433

    13.8.2 流式布局Widget 434

    13.8.3 层式布局Widget 436

    13.8.4 弹性布局Widget 438

    13.9 网络请求库Dio 440

    13.9.1 Dio的使用入门 440

    13.9.2 Dio访问网络 441

    13.10 JSON数据解析 443

    13.10.1 使用json.decode方法 443

    13.10.2 手动编写实体类 444

    13.10.3 自动生成实体类 445

    13.11 路由与数据传递 447

    13.11.1 新建路由 447

    13.11.2 使用注册路由 450

    13.11.3 路由间数据传递 451

    13.12 Flutter与Android的相互通信 456

    13.12.1 PlatformChannel概述 456

    13.12.2 Flutter调用Android 458

    13.12.3 Android调用Flutter 461

    13.13 本章小结 465
  • 内容简介:
    本书是一本Android进阶图书,结合《Android进阶之光》和《Android进阶解密》两本书介绍的知识,一同建立起Android应用开发进阶知识体系。全书共分13章,主要从3个方面来组织内容:(1)Android应用开发所需要掌握的系统源码知识,包括系统源码的下载、编译、调试,包管理机制,输入系统,Native Binder,Java Binder;(2)应用开发必需的知识点,包括Groovy基础、Gradle核心思想、Gradle的Android插件、Android Jetpack架构组件;(3)与跨平台开发相关的知识点,包括跨平台技术演进、Dart基础、Flutter基础。
      本书适合有一定基础的Android应用开发工程师和对Android系统源码感兴趣的读者阅读。
  • 作者简介:
    刘望舒,Android技术专家,Android进阶三部曲《Android进阶之光》 《Android进阶解密》 《Android进阶指北》作者,电子工业出版社博文视点2017、2018、2019年度优秀作者。CSDN知名博主,荣获CSDN 2018年度博客之星称号。GDG Devfest、Droidcon、安卓巴士开发者大会、全球移动开发者大会的特邀演讲嘉宾或出品人。曾在多个知名大厂任职,目前就职于某大型互联网公司,担任技术负责人,负责管理和架构相关工作。
  • 目录:
    Android进阶三部曲知识体系 1

    第1章 系统源码的下载、编译、调试 5

    1.1 使用VirtualBox安装Ubuntu 5

    1.1.1 安装Ubuntu的步骤 6

    1.1.2 安装增强工具 12

    1.2 AOSP源码下载 14

    1.2.1 AOSP简介 14

    1.2.2 下载repo 15

    1.2.3 下载源码 15

    1.3 内核源码下载 16

    1.4 系统源码的整编和单编 18

    1.4.1 编译系统概述 18

    1.4.2 编译源码的方式 20

    1.4.3 准备编译环境 20

    1.4.4 源码整编 21

    1.4.5 源码单编 24

    1.5 Source Insight导入系统源码 25

    1.5.1 新建源码项目 25

    1.5.2 定位文件 27

    1.5.3 全局搜索 28

    1.6 Android Studio导入系统源码 29

    1.7 Android Studio调试系统源码 33

    1.7.1 AOSP源码项目调试 34

    1.7.2 导入部分源码调试 38

    1.7.3 新建Android项目调试 39

    1.8 本章小结 40

    第2章 理解包管理机制和PMS 41

    2.1 PackageInstaller的初始化 41

    2.1.1 PackageManager简介 42

    2.1.2 APK的文件结构和安装方式 42

    2.1.3 寻找PackageInstaller入口 43

    2.1.4 PackageInstallerActivity解析 47

    2.1.5 PackageInstaller初始化的过程 51

    2.2 PackageInstaller安装APK过程 52

    2.2.1 PackageInstaller中的处理 52

    2.2.2 Java框架层的处理 57

    2.2.3 PackageInstaller安装APK的过程 59

    2.3 PMS处理APK的安装过程 59

    2.3.1 PackageHandler处理安装消息 60

    2.3.2 复制APK的处理 66

    2.3.3 PMS处理APK安装 70

    2.3.4 PMS处理APK安装的步骤 76

    2.4 PMS的创建过程 77

    2.4.1 SystemServer处理部分 77

    2.4.2 PMS构造方法 80

    2.5 APK解析过程 91

    2.5.1 引入PackageParser 91

    2.5.2 PackageParser解析APK 92

    2.5.3 Package的数据结构 99

    2.6 本章小结 100

    第3章 理解输入系统和IMS 102

    3.1 输入事件传递流程的组成部分 103

    3.2 IMS的诞生 105

    3.2.1 SystemServer处理部分 105

    3.2.2 InputManagerService构造方法 107

    3.3 IMS的启动过程 110

    3.4 InputDispatcher的启动过程 112

    3.5 InputReader处理事件的过程 113

    3.6 输入事件的处理总结 119

    3.7 InputReader的加工类型 120

    3.8 InputDispatcher的分发过程 123

    3.8.1 唤醒InputDispatcherThread 123

    3.8.2 InputDispatcher进行分发 124

    3.9 事件分发到目标窗口的过程 128

    3.9.1 为事件寻找合适的分发目标 128

    3.9.2 处理点击形式的事件 132

    3.9.3 向目标窗口发送事件 135

    3.9.4 Motion事件分发过程总结 136

    3.10 本章小结 138

    第4章 IPC机制 139

    4.1 Linux和Android的IPC机制 139

    4.1.1 Linux中的IPC机制 139

    4.1.2 Android中的IPC机制 141

    4.2 开启多进程 142

    4.2.1 开启多进程举例 142

    4.2.2 开启多进程引出的问题 144

    4.3 用Messenger进行进程间通信 146

    4.4 使用AIDL实现跨进程方法调用 150

    4.4.1 创建AIDL文件 150

    4.4.2 创建服务端 152

    4.4.3 客户端调用 153

    4.5 用ContentProvider进行进程间通信 155

    4.5.1 建立数据库,方便ContentProvider使用 155

    4.5.2 使用ContentProvider对数据库进行操作 156

    4.5.3 在Activity中调用另一个进程的GameProvider方法 158

    4.6 用Socket实现跨进程聊天程序 160

    4.7 本章小结 167

    第5章 Native Binder原理 168

    5.1 学习Binder的前置知识点 168

    5.1.1 Linux和Binder的IPC通信原理 169

    5.1.2 使用Binder的原因 173

    5.1.3 学习Binder的原因 174

    5.2 ServiceManager中的Binder机制 175

    5.2.1 基于Binder通信的C/S架构 175

    5.2.2 MediaServer的main函数 176

    5.2.3 每个进程唯一的ProcessState实例 177

    5.2.4 解析ServiceManager中的Binder机制 180

    5.2.5 小结 187

    5.3 系统服务的注册过程 187

    5.3.1 从调用链角度说明MediaPlayerService的注册过程 187

    5.3.2 从进程角度说明MediaPlayerService的注册过程 195

    5.3.3 小结 196

    5.4 ServiceManager的启动过程 196

    5.4.1 打开binder设备 198

    5.4.2 注册成为Binder机制的上下文管理者 201

    5.4.3 循环等待和处理客户端发来的请求 203

    5.5 系统服务的获取过程 206

    5.5.1 客户端MediaPlayerService请求获取服务 206

    5.5.2 服务端ServiceManager处理请求 212

    5.6 本章小结 218

    第6章 Java Binder原理 219

    6.1 Java Binder的JNI注册 219

    6.1.1 Binder类的注册 223

    6.1.2 BinderInternal类的注册 224

    6.2 Java Binder中系统服务的注册过程 225

    6.2.1 将AMS注册到ServiceManager 226

    6.2.2 引出JavaBBinder 230

    6.2.3 解析JavaBBinder 232

    6.2.4 Java Binder架构 234

    6.3 本章小结 235

    第7章 Groovy基础 236

    7.1 Groovy概述 236

    7.2 Groovy编写和调试 237

    7.3 变量 237

    7.4 方法 237

    7.5 类 238

    7.6 语句 239

    7.6.1 断言 239

    7.6.2 for循环 239

    7.6.3 switch语句 240

    7.7 数据类型 241

    7.7.1 字符串 241

    7.7.2 List 242

    7.7.3 Map 242

    7.7.4 闭包(Closure) 243

    7.8 I/O操作 244

    7.8.1 文件读取 244

    7.8.2 文件写入 244

    7.9 其他 245

    7.9.1 asType 245

    7.9.2 判断是否为真 245

    7.9.3 安全取值 245

    7.9.4 with操作符 246

    7.10 本章小结 246

    第8章 Gradle核心思想 247

    8.1 Gradle概述 247

    8.1.1 项目自动化 248

    8.1.2 构建工具 248

    8.1.3 Gradle的特性 253

    8.2 Gradle基础知识 255

    8.2.1 配置Gradle环境 255

    8.2.2 实现Hello World 257

    8.2.3 Gradle的任务 258

    8.2.4 Gradle日志级别 260

    8.2.5 Gradle 命令行 261

    8.3 被忽视的Gradle Wrapper 263

    8.3.1 为什么需要Gradle Wrapper 263

    8.3.2 构建Gradle Wrapper 264

    8.3.3 配置Gradle Wrapper 265

    8.3.4 使用Gradle Wrapper 266

    8.3.5 升级Gradle Wrapper 267

    8.3.6 自定义Gradle Wrapper 268

    8.4 Gradle插件基础 268

    8.4.1 Gradle插件概述 268

    8.4.2 应用Gradle插件 270

    8.4.3 插件DSL 272

    8.4.4 自定义对象插件 273

    8.4.5 Gradle插件的作用和优点 274

    8.5 自定义Gradle插件 274

    8.5.1 在build.gradle中编写 275

    8.5.2 在buildSrc工程项目中编写 277

    8.5.3 在独立项目中编写 278

    8.6 本章小结 281

    第9章 Gradle的Android插件 282

    9.1 什么是Gradle的Android插件 282

    9.2 Android Studio的模块类型和项目视图 283

    9.3 项目build.gradle 284

    9.4 模块build.gradle 285

    9.4.1 Gradle的Android插件类型 286

    9.4.2 Android块 286

    9.4.3 dependencies块 291

    9.5 Android签名文件配置 292

    9.5.1 自定义签名信息文件 292

    9.5.2 本地添加签名信息文件 293

    9.6 Gradle的库依赖 294

    9.7 Gradle的库依赖管理 295

    9.7.1 Gradle的依赖传递 296

    9.7.2 Gradle的依赖检查 296

    9.7.3 Gradle的依赖冲突 299

    9.8 本章小结 301

    第10章 Android Jetpack架构组件 302

    10.1 Android Jetpack简介 303

    10.2 Android Jetpack分类 303

    10.2.1 Architecture 304

    10.2.2 Foundationy 305

    10.2.3 Behavior 306

    10.2.4 UI 307

    10.3 在应用中引入Jetpack相关组件 307

    10.4 使用Lifecycle 307

    10.4.1 为什么需要Lifecycle 307

    10.4.2 如何使用Lifecycle 309

    10.4.3 Lifecycle应用举例 312

    10.4.4 自定义LifecycleOwner 315

    10.5 Lifecycle的原理 316

    10.5.1 Lifecycle的生命周期状态事件和状态 316

    10.5.2 Lifecycle如何观察Activity和Fragment的生命周期 317

    10.5.3 Lifecycle关联类 327

    10.6 使用LiveData 328

    10.6.1 什么是LiveData 328

    10.6.2 LiveData的基本用法 329

    10.6.3 更改LiveData中的数据 330

    10.6.4 合并多个LiveData数据源 332

    10.6.5 拓展LiveData对象 333

    10.7 LiveData的原理 335

    10.7.1 LiveData如何观察组件生命周期变化 335

    10.7.2 LiveData的observe方法回调 336

    10.7.3 postValue/setValue方法分析 339

    10.7.4 Transformations.map方法分析 341

    10.7.5 LiveData关联类 343

    10.8 使用ViewModel 344

    10.8.1 什么是ViewModel 345

    10.8.2 ViewModel的基本使用方法 345

    10.8.3 ViewModel的生命周期 347

    10.9 ViewModel的原理 348

    10.10 本章小结 351

    第11章 跨平台技术演进 352

    11.1 Web App 353

    11.2 Hybrid App 353

    11.2.1 Cordova 354

    11.2.2 Ionic 355

    11.2.3 VasSonic 355

    11.2.4 微信小程序 356

    11.3 语言编译转换 357

    11.4 原生渲染 358

    11.4.1 React Native 358

    11.4.2 Weex 358

    11.4.3 快应用 359

    11.5 自绘UI 360

    11.5.1 Qt 360

    11.5.2 Flutter 361

    11.6 本章小结 362

    第12章 Dart基础 363

    12.1 Dart开发环境搭建 363

    12.2 Dart概述 364

    12.3 Dart的特性和重要概念 365

    12.4 Dart关键字 366

    12.5 变量 367

    12.6 基本数据类型 367

    12.6.1 Number 367

    12.6.2 String 368

    12.6.3 Boolean 368

    12.6.4 List 368

    12.6.5 Set 369

    12.6.6 Map 369

    12.7 函数 369

    12.7.1 可选参数 370

    12.7.2 默认参数值 370

    12.7.3 main函数 371

    12.7.4 匿名函数 371

    12.8 流程控制语句 371

    12.8.1 for循环 372

    12.8.2 switch和case 372

    12.9 捕获异常 373

    12.10 为类添加新的功能 373

    12.11 库的使用方法 374

    12.12 异步支持 375

    12.13 使类可调用 376

    12.14 创建实例 376

    12.15 本章小结 376

    第13章 Flutter基础 377

    13.1 Flutter开发环境搭建和Hello World 377

    13.1.1 Flutter概述 378

    13.1.2 Flutter开发环境搭建 378

    13.1.3 运行一个Flutter Demo 383

    13.1.4 Hello World 385

    13.2 Widget基础 386

    13.2.1 Widget概述 387

    13.2.2 Widget的分类 387

    13.2.3 Widget的状态分类 388

    13.2.4 根Widget的种类 388

    13.3 Basic Widget 389

    13.3.1 代码模板和主题 389

    13.3.2 文本 390

    13.3.3 图片 391

    13.3.4 凸起按钮 394

    13.3.5 其他Widget 395

    13.4 Material组件 397

    13.4.1 MaterialApp 398

    13.4.2 Scaffold 401

    13.4.3 AppBar 403

    13.4.4 BottomNavigationBar 405

    13.4.5 TabBar 407

    13.4.6 Drawer 411

    13.5 Scrolling Widget 413

    13.5.1 ListView 413

    13.5.2 GridView 418

    13.5.3 PageView 419

    13.6 手势相关Widget 421

    13.6.1 指针事件 421

    13.6.2 手势 422

    13.6.3 使用GestureDetector 423

    13.6.4 使用Dismissible 424

    13.7 资源和图片 426

    13.7.1 指定asset 426

    13.7.2 加载文本 427

    13.7.3 加载图片 430

    13.8 布局Widget 433

    13.8.1 线性布局Widget 433

    13.8.2 流式布局Widget 434

    13.8.3 层式布局Widget 436

    13.8.4 弹性布局Widget 438

    13.9 网络请求库Dio 440

    13.9.1 Dio的使用入门 440

    13.9.2 Dio访问网络 441

    13.10 JSON数据解析 443

    13.10.1 使用json.decode方法 443

    13.10.2 手动编写实体类 444

    13.10.3 自动生成实体类 445

    13.11 路由与数据传递 447

    13.11.1 新建路由 447

    13.11.2 使用注册路由 450

    13.11.3 路由间数据传递 451

    13.12 Flutter与Android的相互通信 456

    13.12.1 PlatformChannel概述 456

    13.12.2 Flutter调用Android 458

    13.12.3 Android调用Flutter 461

    13.13 本章小结 465
查看详情
12
相关图书 / 更多
Android进阶指北
Animate 2022二维动画制作案例教程(全视频微课版)
董佳佳、程远、金洪宇
Android进阶指北
Android性能优化入门与实战
张世欣(拭心)
Android进阶指北
Android图形显示系统
李先儒
Android进阶指北
Animate CC 动画制作案例教程(第2版)
刘鹏程
Android进阶指北
Android积木式编程开发:AppInventor2018离线中文版(第2版)
刘载兴、张燕燕 编
Android进阶指北
Anisha Accidental Detective
Serena Patel 著;Emma McCann 绘
Android进阶指北
Android自动化测试实战:Python+Appium +unittest
Storm 梁培峰
Android进阶指北
AnEssayonthePrincipleofPopulationandOthe
Malthus, Thomas
Android进阶指北
Android移动应用基础教程(Android Studio)(第3版)
黑马程序员
Android进阶指北
Ansys Workbench 2022中文版有限元分析从入门到精通
CAD/CAM/CAE技术联盟
Android进阶指北
Animate 2022中文版入门与提高
胡仁喜、王昌盛、李华
Android进阶指北
Ansys Fluent中文版流场分析从入门到精通
曾建邦 单丰武
您可能感兴趣 / 更多
Android进阶指北
Android进阶之光(第2版)
刘望舒
Android进阶指北
Android进阶解密
刘望舒
Android进阶指北
Android进阶之光
刘望舒 著