分页、导航、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 几档,选太快会耗电,选太慢则跟不上手势识别。
读数是设备坐标系下的原始值,做姿态解算时要处理噪声、零偏和时间戳对齐。后台监听必须遵守后台限制和省电策略,否则在高版本系统上会被杀掉或降频。
测试要覆盖横竖屏旋转、没有某颗传感器的机型和模拟器差异。没有硬件时用虚拟传感器或录制回放,避免业务逻辑写死在某一型号的量程上。
Jetpack 与 Android UI 速查:分页、导航、WorkManager
https://lautung.com/archives/jetpack-android-ui
评论