该log所在文件处: works/ /services/core/java/com/android/server/am/ActivityManagerService.java
final void appDiedLocked(ProcessRecord app, int pid,
IApplicationThread thread) {
// First check if this ProcessRecord is actually active for the pid.
synchronized (mPidsSelfLocked) {
ProcessRecord curProc = mPidsSelfLocked.get(pid);
if (curProc != app) {
Slog.w(TAG, \"Spurious death for \" + app + \", curProc for \" + pid + \": \" + curProc);
return;
}
}
BatteryStatsImpl stats = mBatteryStatsService.getActiveStatistics();
synchronized (stats) {
stats.noteProcessDiedLocked(app.info.uid, pid);
}
if (!app.killed) {
Process.killProcessQuiet(pid);
Process.killProcessGroup(app.uid, pid);
app.killed = true;
}
// Clean up already done if the process has been re-started.
if (app.pid == pid && app.thread != null && app.thread.asBinder() == thread.asBinder()) {
boolean doLowMem = app.instrumentationClass == null;
boolean doOomAdj = doLowMem;
if (!app.killedByAm) {
Slog.i(TAG, \"Process \" + app.processName + \" (pid \" + pid + \") has died\");
mAllowLowerMemLevel = true;
} else {
// Note that we always want to do oom adj to update our state with the new number of procs.
mAllowLowerMemLevel = false;
doLowMem = false;
}
EventLog.writeEvent(EventLogTags.AM_PROC_DIED, app.userId, app.pid, app.processName);
if (DEBUG_CLEANUP)
Slog.v(TAG, \"Dying app: \" + app + \", pid: \" + pid + \", thread: \" + thread.asBinder());
handleAppDiedLocked(app, false, true);
if (doOomAdj) {
updateOomAdjLocked();
}
if(doLowMem) {
doLowMemReportIfNeededLocked(app);
}
} else if (app.pid != pid) {
// A new process has already been started.
Slog.i(TAG, \"Process \" + app.processName + \" (pid \" + pid+ \") has died and restarted (pid \" + app.pid + \").\");
EventLog.writeEvent(EventLogTags.AM_PROC_DIED, app.userId, app.pid, app.processName);
} else if (DEBUG_PROCESSES) {
Slog.d(TAG, \"Received spurious death notification for thread \" + thread.asBinder());
}
}
从代码中发现,当app.killedByAm = false,就会出现died的log。
IBinder所对应的Service进程异常退出(被杀)造成的。
那么service被杀除了service本身代码逻辑的问题,很多情况就是系统内存不足时引起的
简单讲不是ActivityManager主动kill该应用,而是LowMemory的原因(for RAM)。
如果想过滤掉具体特定应用可在此操作:
if (!app.killed) {
Process.killProcessQuiet(pid);
Process.killProcessGroup(app.uid, pid);
app.killed = true;
}
--------------------- 修改成:
if (!app.killed) {
if(!\"packagename\".equals(app.processName)){
Process.killProcessQuiet(pid);
Process.killProcessGroup(app.uid, pid);
}
app.killed = true;
}
继续阅读与本文标签相同的文章
-
还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)
2026-05-18栏目: 教程
-
Java 12 与Java 13 新特性预览:Switch表达式、GC新垃圾回收算法、低延时GC、ZGC改进等
2026-05-18栏目: 教程
-
Apache Flink 在同程艺龙实时计算平台的研发与应用实践
2026-05-18栏目: 教程
-
Apache Flink 进阶(一):Runtime 核心机制剖析
2026-05-18栏目: 教程
-
RocketMQ一个新的消费组初次启动时从何处开始消费呢?
2026-05-18栏目: 教程
