广播接收者动态注册者进程关系图
2023-02-14 05:34:15 1 举报
广播接收者动态注册者进程关系图
作者其他创作
大纲/内容
PendingResult
- int mType- boolean mOrderedHint- boolean mInitialStickyHint- IBinder mToken- int mSendingUser- int mFlags- int mResultCode- String mResultData- Bundle mResultExtras- boolean mAbortBroadcast- boolean mFinished
+ void finish()+ void sendFinished(IActivityManager am)
IntentFilter
Binder
Args
- Intent mCurIntent- boolean mOrdered- boolean mDispatched
+ void run()
InnerReceiver 用于和系统进程通信
ArrayList
应用进程的接收者在系统进程中的代理
ReceiverList
ActivityManagerService ownerIIntentReceiver receiverProcessRecord app // 注册者进程
BroadcastReceiver
- PendingResult mPendingResult
注册者进程
方法参数
前台/后台消息队列
动态接收者在系统进程中的实体
IIntentReceiver.Stub
+ void performReceive(... ... ...)
用于封装广播接收者的IntentFilter
应用定义的动态接收者
BroadcastQueue
+ ActivityManagerService mService+ ArrayList mParallelBroadcasts+ ArrayList mOrderedBroadcasts+ BroadcastRecord mPendingBroadcast+ BroadcastHandler mHandler... ... ... ...
+ void enqueueParallelBroadcastLocked(BroadcastRecord r)+ void scheduleBroadcastsLocked()+ void processNextBroadcast(boolean fromMsg)... ... ... ...
四大组件,进程的状态管理者
每个进程都有一个实例
ReceiverDispatcher.InnerReceiver
+ WeakReference<LoadedApk.ReceiverDispatcher> mDispatcher+ LoadedApk.ReceiverDispatcher mStrongRef // 为 false;
BroadcastFilter
ReceiverList receiverListString packageNameString requiredPermissionint owningUidint owningUserId
ProcessRecord
- ArraySet receivers
ActivityManagerService
+ Intent registerReceiver(... ... ...)+ BroadcastQueue broadcastQueueForIntent(Intent intent)
Runnable
相互关联
abstract
对于有序广播来说会通过 sendFinished 方法通知 AMS 广播的接收状态
IBinder.DeathRecipient
XXXBroadcastReceiver
LoadedApk.ReceiverDispatcher
- IIntentReceiver.Stub mIIntentReceiver- BroadcastReceiver mReceiver- Context mContext- Handler mActivityThread- Instrumentation mInstrumentation- boolean mRegistered- boolean mForgotten
+ void performReceive(... ... ...)+ BroadcastReceiver getIntentReceiver()
LoadedApk
... ... ...
IIntentReceiver.Stub.Prox
+ linkToDeath()
0 条评论
下一页