作者:秋城
概述
Android12 新增的 system_server 进程(LocalService)本地服务,用于管理native tombstones。
该服务在开机 SystemServer 初始化流程启动,添加到 LocalService,然后启动一个 ServiceThread 线程用于(mHandler.post)处理本服务的业务。
NativeTombstoneManager 的功能主要是:
- 监听/data/tombstones目录文件变动,解析为 TombstoneFile 对象保存,通知 dropbox
- 特定 tombstones 文件删除
- 特定 tombstones 文件检索
值得关注的是 AMS 对该服务的使用,也是 Android11 新增 API:ActivityManager.java#getHistoricalProcessExitReasons()
软件架构如图:

图:NativeTombstoneManager 类图
启动流程

图:NativeTombstoneManager 服务启动时序图
服务比较简单,和其他 SystemServer 启动的服务一样,
frameworks/base/services/core/java/com/android/server/os/NativeTombstoneManagerService.java
public class NativeTombstoneManagerService extends SystemService {
private NativeTombstoneManager mManager;
@Override
public void onStart() {
mManager = new NativeTombstoneManager(getContext());
//仅添加本地服务,没有binder服务
LocalServices.addService(NativeTombstoneManager.class, mManager);
}
@Override
public void onBootPhase(int phase) {
if (phase == SystemService.PHASE_ACTIVITY_MANAGER_READY) {
mManager.onSystemReady();
}
}
}
本服务也是 SystemService 工具类的子类,通过重写 onStart、onBootPhase 获得代码流程
在 onStart 中初始化真正的服务实现 NativeTombstoneManager,实例化后添加到 LocalServices
frameworks/base/services/core/java/com/android/server/os/NativeTombstoneManager.java
public final class NativeTombstoneManager {
NativeTombstoneManager(Context context) {
//启动handler线程,用于后续处理本服务的业务
final ServiceThread thread = new ServiceThread(TAG + ":tombstoneWatcher",
THREAD_PRIORITY_BACKGROUND, true /* allowIo */);
thread.start();
mHandler = thread.getThreadHandler();
//启动文件监听/data/tombstones
mWatcher = new TombstoneWatcher();
mWatcher.startWatching();
}
void onSystemReady() {
registerForUserRemoval();
registerForPackageRemoval();
// 开机阶段先扫描一次/data/tombstones目录
mHandler.post(() -> {
final File[] tombstoneFiles = TOMBSTONE_DIR.listFiles();
for (int i = 0; tombstoneFiles != null && i < tombstoneFiles.length; i++) {
if (tombstoneFiles[i].isFile()) {
handleTombstone(tombstoneFiles[i]);
开机流程有三个动作
- 启动 handler 线程,用于后续处理本服务的业务
- TombstoneWatcher 启动文件监听 /data/tombstones
- 开机阶段先扫描一次 /data/tombstones 目录
看一下 handleTombstone
frameworks/base/services/core/java/com/android/server/os/NativeTombstoneManager.java
private void handleTombstone(File path) {
final String filename = path.getName()

最低0.47元/天 解锁文章

615

被折叠的 条评论
为什么被折叠?



