可以在此处找到违规行:
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/com/android/server/am/ActivityManagerService.java/#4858
(不同版本的Android L不同的线路)
我假设您使用的是某种形式的 Android L,因为直到那时才添加特定的错误消息。
如果您在进程中运行 ContentProvider,ActivityManagerService 中的这两个 cmets 可能会有所帮助:
9303 // NOTE: there is still a race here where a signal could be
9304 // pending on the process even though we managed to update its
9305 // adj level. Not sure what to do about this, but at least
9306 // the race is now smaller.
9307 if (!success) {
9308 // Uh oh... it looks like the provider's process
9309 // has been killed on us. We need to wait for a new
9310 // process to be started, and make sure its death
9311 // doesn't kill our process.
然后……
9317 appDiedLocked(cpr.proc);
appDiedLocked 也可以从其他一些源文件中调用:ActiveServices.java 和 ActivityStackSupervisor.java,一个依赖于抛出的 DeadObjectException,另一个依赖于 RemoteException。
appDiedLocked 看起来像这样
4853 final void appDiedLocked(ProcessRecord app, int pid, IApplicationThread thread) {
4854 // First check if this ProcessRecord is actually active for the pid.
4855 synchronized (mPidsSelfLocked) {
4856 ProcessRecord curProc = mPidsSelfLocked.get(pid);
4857 if (curProc != app) {
4858 Slog.w(TAG, "Spurious death for " + app + ", curProc for " + pid + ": " + curProc);
4859 return;
4860 }
4861 }
由于某种原因,curProc 与应用程序 ProcessRecord 不同,并且 appDiedLocked 方法被缩短了。在你的情况下 curProc 是空的,再次出于某种原因。
长话短说:您的进程死亡或被杀死,并且某些状态或条件阻止 appDiedLocked 继续运行 killProcess 命令。您需要进行更多调查/记录以找出发生这种情况的原因。
如果你有一个服务想要保持活动状态,除非你已经在做,否则我建议你给它附加一个状态栏通知,这样它被杀死的可能性就会降低。