分页、导航、WorkManager 三个 Jetpack 组件,加上几个系统层话题。

一、Jetpack 组件

JetPack Paging3分页

Paging组件的意义

Paging支持的架构类型

不同企业的API返回数据分页方式不同。主要分3种,所以Paging提供了三种不同的API。PositionalDataSource ,PageKeyedDataSource,ItemKeyedDataSource

  • 网络数据源

  • 数据库数据源

  • 网络+数据库数据源

Paging的3个核心类

  • PagedListAdapter

  • PageList

  • DataSource

  • PositionalDataSource

  • PageKeyedDataSource

  • ItemKeyedDataSource

BoundaryCallBack

Jetpack Navigation

诞生和优势

Navigation的主要元素

Navigation的应用

动画效果和safe args传参

NavigationUI应用

App Bar

  • ActionBar

  • ToolBar

  • CollapsingToolbarLayout

Menu

  • 抽屉菜单DrawLayout+NavigationView

  • 底部菜单BottomNavigationView

深层链接DeepLink

PendingIntent方式

URL方式

Jetpack WorkManager

  • JDK Timer

  • JobScheduler

  • Jetpack WorkManager

WorkManager作用

WorkManager的特点

  • 任务一定会执行

  • 几乎兼容100%的设备

WorkManager兼容方案

定义任务和任务执行结果

设置任务触发条件和延迟执行任务

设置指数退避策略与设置标签

观察任务状态与取消任务

参数传递

周期性任务

任务链与任务组合

二、UI 与渲染

WebView

WebView 内嵌 Chromium 内核渲染网页。Android 5 后可独立更新 WebView 包。JS 桥用 addJavascriptInterface,必须限制注解方法并校验来源,否则有远程代码风险。

生命周期要在 Activity onDestroy 里 destroy,避免泄漏。混合开发注意 cookies、第三方 Cookie、混合内容。文件选择与权限回调要自己接。硬件加速与分层渲染影响滚动。

调试 chrome://inspect。进程可独立 :webview 降低崩溃影响。内核版本碎片化会导致 CSS 差异。能用 Custom Tabs 就不要强上 WebView。

Android RecyclerView 和 ListView 的区别

RecyclerView 可以完成 ListView,GridView 的效果,还可以完成瀑布流的效果。同时还可以

设置列表的滚动方向(垂直或者水平);

RecyclerView 中 view 的复用不需要开发者自己写代码,系统已经帮封装完成了。

RecyclerView 可以进行局部刷新。

RecyclerView 提供了 API 来实现 item 的动画效果。

在性能上:

如果需要频繁的刷新数据,需要添加动画,则 RecyclerView 有较大的优势。

如果只是作为列表展示,则两者区别并不是很大。

三、系统层

Android init.rc文件解析

init.rc 描述 Android 启动后 init 进程要拉起的服务、权限和触发动作。语法围绕 service、on 触发器和 import 展开,early-init、boot、property 变化都会走进不同段落。

写服务时要明确 class、user/group、socket 和重启策略。权限过宽会留下攻击面,过窄则服务起不来。属性触发适合做“某模块就绪后再启动依赖项”,比盲目 sleep 更可靠。

排障先看 logcat 里 init 的报错,再对照 sepolicy。改 rc 后必须验证冷启动和充电开机两条路径,很多问题只在其中一条出现。

Android.mk文件解析

Android.mk 是旧版 NDK/AOSP 的 Make 描述文件,用来声明模块名、源文件、头文件路径和依赖库。LOCAL_PATH、CLEAR_VARS、BUILD_SHARED_LIBRARY 这类宏决定最终产出 so、静态库还是可执行文件。

阅读时先看 LOCAL_MODULE 和 LOCAL_SRC_FILES,再顺着 LOCAL_SHARED_LIBRARIES 找链接关系。条件编译常用 TARGET_ARCH、BOARD 变量,同一份 mk 可能在不同产品上走出完全不同的模块集合。

新项目更推荐 Android.bp,但存量平台代码仍大量保留 mk。改依赖前先整编验证,避免只改一处导致隐式包含的模块丢失。

Android车载(二) CarService

Android 车载应用开发指南 - CarService 详解-CSDN博客

概述

CarService 是车载 Android 操作系统 Android Automotive OS(下文简介 AAOS)的核心服务之一,所有车载相关的应用都需要通过 CarService 来查询、控制整车的状态,不仅仅是车辆控制,实际上 CarService 几乎就是整个车载 Framework 最核心的组件。

CarService组成

CarService 源码位置:/packages/services/Car

Android的传感器模式

Android 传感器通过 SensorManager 注册监听,常见类型包括加速度、陀螺仪、磁力计、光线和接近。采样延迟分 FASTEST、GAME、UI、NORMAL 几档,选太快会耗电,选太慢则跟不上手势识别。

读数是设备坐标系下的原始值,做姿态解算时要处理噪声、零偏和时间戳对齐。后台监听必须遵守后台限制和省电策略,否则在高版本系统上会被杀掉或降频。

测试要覆盖横竖屏旋转、没有某颗传感器的机型和模拟器差异。没有硬件时用虚拟传感器或录制回放,避免业务逻辑写死在某一型号的量程上。