有时候经常遇到:\06-09 13:30:49.662 I/ActivityManager( 797): Process xxxxx (pid 30262) has died .

 打印该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(!"包名".equals(app.processName)){                Process.killProcessQuiet(pid);                Process.killProcessGroup(app.uid, pid);            }            app.killed = true;        }

更多相关文章

  1. Button代码小写,运行时大写
  2. android 365手机秘书源代码
  3. android studio调试c/c++代码
  4. Android开发者实用代码片段 与大家分享
  5. 【Android】使用LiveData KTX Builder让代码更简洁
  6. 一个简单的iPhone项目及代码
  7. android studio调试c++代码

随机推荐

  1. 【前端词典】分享 8 个有趣且实用的 API
  2. jQuery五彩Tab选项卡动画
  3. 10个超绚丽的HTML5动画赏析
  4. 【前端词典】提高幸福感的 9 个 CSS 技巧
  5. HTML5 3D环形方块翻转动画
  6. 【前端词典】几个有益的 CSS 小知识
  7. 这个jQuery相册很特别
  8. 一组强大的CSS3 Material 按钮
  9. HTML5粒子螺旋线条3D动画
  10. 为NetBeans添加Andriod平台