有时候经常遇到:\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. Android中两种设置全屏的方法
  2. 获取手机安装的全部应用的示例教程
  3. Android基于基于布局嵌套的页面导航实现
  4. Button代码小写,运行时大写
  5. Android(安卓)uevent
  6. Android(安卓)Activity的启动
  7. android中的sqlit3数据库进行手机应用软件开发(自写的一个财务管
  8. android shape 代码实现按钮背景
  9. Android四大组件的理解

随机推荐

  1. Android Overview
  2. Android的Adapter与BaseAdapter的介绍
  3. Android 控件属性
  4. Android练习——Spinner二级联动_城市选
  5. Android屏幕尺寸、标题栏高度、状态栏高
  6. Android解析json数组对象
  7. android SAX 解析 xml文档
  8. AndroidTextView的跑马灯效果,解决复杂布
  9. android 随手记 摄像头录像
  10. Android 自适应背光反应慢的修改