该log所在文件处:frameworks/base/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;
        }
 

更多相关文章

  1. 史上最全!最经典!最无私的Android资料(书籍+代码)分享
  2. android计时demo源代码
  3. Android写文件到SDCard的一般过程和代码
  4. android 代码混淆问题解决
  5. Android 小代码集
  6. Android应用程序启动过程源代码分析(4)
  7. Android应用程序启动过程源代码分析(3)
  8. Android应用程序启动过程源代码分析(2)
  9. android 不使用布局文件,完全由代码控制布局实例

随机推荐

  1. Android使用高德地图地理围栏定位自动发
  2. MacPro 10.13.6 编译 android-8.1.0_r53
  3. 8、android代码优化技术记录
  4. 关于Handler的拦截
  5. Android(安卓)Media Framework(1): 总纲
  6. Xamarin.Android(安卓)入门开发
  7. Mac 安装adb
  8. android sqlite中字符串含有单引号的处理
  9. android notepad详解
  10. android启动Activity的两种方法