MainThread

JavaShareClient
1.队列:
里面有一个队列static SkDeque gFuncPtrQ(sizeof(FuncPtrRec));
这个队列里面的类型是
    struct FuncPtrRec {
        void (*fProc)(void* payload);
        void* fPayload;
    };
2.入队函数
void JavaSharedClient::EnqueueFunctionPtr(void (*proc)(void* payload),
                                              void* payload)
向队列放入成员
调用这个函数的地方有如下几处:
a.static void anp_postEvent(NPP instance, const ANPEvent* event)
b.void EnqueueFunctionPtrAndroid(void (*proc)(void*), void* payload)//MainThreadAndroid调用
c.void AndroidThreading::scheduleDispatchFunctionsOnMainThread()//MainThreadAndroid调用,support同2
d.WebIconDatabase::didImportIconURLForPageURL

a.anp_postEvent->JavaSharedClient::EnqueueFunctionPtr
b.WebIconDatabase::didImportIconURLForPageURL->JavaSharedClient::EnqueueFunctionPtr
c.MainThread.cpp->scheduleDispatchFunctionsOnMainThread->EnqueueFunctionPtrAndroid->JavaSharedClient::EnqueueFunctionPtr
MainThread.cpp->AndroidThreading::scheduleDispatchFunctionsOnMainThread()->JavaSharedClient::EnqueueFunctionPtr
2.1
dispatchFunctionsFromMainThread
callOnMainThread
callOnMainThreadAndWait
setMainThreadCallbacksPaused


3. 调度函数
void JavaSharedClient::ServiceFunctionPtrQueue()
取出元素进行处理。
这个函数在void JavaBridge::ServiceFuncPtrQueue(JNIEnv*)调用,就是java的
所以nativeServiceFuncPtrQueue->JavaBridge::ServiceFuncPtrQueue->
JavaSharedClient::ServiceFunctionPtrQueue()->JavaSharedClient::ServiceFunctionPtrQueue()
3.1 调度函数入口
JavaSharedClient::EnqueueFunctionPtr
void JavaBridge::ServiceFuncPtrQueue
env->CallVoidMethod(mJavaObject, mSignalFuncPtrQueue);
JWebCoreJavaBridge.signalServiceFuncPtrQueue
所以每添加一个就会调度一次。




4.其他
scheduleDispatchFunctionsOnMainThread()
{EnqueueFunctionPtrAndroid(timeoutFired, 0);}
会把某些函数让主线程调用,传入函数指针。
但是这里却传入了另一个消息队列处理函数,相当于一种级联吧,功能有扩充,还没细看。


既然有消息处理,那肯定有放入队列的地方。
就是上面的callOnMainThread和callOnMainThreadAndWait


5.总结
所以要在主线程执行有如下几种办法
JavaSharedClient::EnqueueFunctionPtr。
callOnMainThread和callOnMainThreadAndWait

当然后两种调用的是第一个的函数。



6.主线程的初始化
有webcore线程调过来,调用到
Webkit InitializeThreading.cpp中的initializeThreading。
会将主线程id设置为当前线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值