Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
发现开机的时候Muisc会收到broadcast被调用起来,
ActivityManager: Start proc 982:com.android.music/u0a29 for broadcast com.android.music/.MediaButtonIntentReceiver
那么如何确定是谁发的广播呢?
虽然Send Broadcast有很多方法,但是最终走的接口都一样,都是经过ActivityManagerService通过processNextBroadcast()接口来处理,在这里打印出对应的caller name就可以了。
kris@:~/rk3288/frameworks/base$ g df services/core/java/com/android/server/am/BroadcastQueue.javadiff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.javaindex 6de8579..4e8ea51 100644--- a/services/core/java/com/android/server/am/BroadcastQueue.java+++ b/services/core/java/com/android/server/am/BroadcastQueue.java@@ -1063,9 +1063,11 @@ public final class BroadcastQueue {}// Not running -- get it started, to be executed when the app comes up.- if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,+ Slog.v(TAG_BROADCAST,"Need to start app ["+ mQueueName + "] " + targetProcess + " for broadcast " + r);+ Slog.v(TAG_BROADCAST, "callerApp:"+r.callerApp);
对应log:
BroadcastQueue: Need to start app [foreground] com.android.music for broadcast BroadcastRecord{6bbc495 u-1 android.media.AUDIO_BECOMING_NOISY}
BroadcastQueue: callerApp:ProcessRecord{6bc6f30 551:system/1000}
ActivityManager: Start proc 2836:com.android.music/u0a29 for broadcast com.android.music/.MediaButtonIntentReceiver
从log可以看出是”android.media.AUDIO_BECOMING_NOISY” 这个broadcast触发了music进程的启动,调用的app是system,即system_server, pid是551, uid是1000