真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android構(gòu)造函數(shù)怎么實(shí)現(xiàn)

本篇內(nèi)容介紹了“Android構(gòu)造函數(shù)怎么實(shí)現(xiàn)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的坡頭網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

簡(jiǎn)單來(lái)說(shuō),管道就是一個(gè)文件,在管道的兩端,分別是兩個(gè)打開(kāi)文件文件描述符,這兩個(gè)打開(kāi)文件描述符都是對(duì)應(yīng)同一個(gè)文件,   其中一個(gè)是用來(lái)讀的,別一個(gè)是用來(lái)寫的,一般的使用方式就是,一個(gè)線程通過(guò)讀文件描述符中來(lái)讀管道的內(nèi)容,當(dāng)管道沒(méi)有內(nèi)容時(shí),這個(gè)線程就會(huì)進(jìn)入等待狀態(tài),   而另外一個(gè)線程通過(guò)寫文件描述符來(lái)向管道中寫入內(nèi)容,寫入內(nèi)容的時(shí)候,如果另一端正有線程正在等待管道中的內(nèi)容,那么這個(gè)線程就會(huì)被喚醒。

這個(gè)等待和喚醒 的操作是如何進(jìn)行的呢,這就要借助Linux系統(tǒng)中的epoll機(jī)制了。

Linux系統(tǒng)中的epoll機(jī)制為處理大批量句柄而作了改進(jìn)的poll,是Linux下多路復(fù)用IO接口select/poll的增強(qiáng)版本,它能顯著減   少程序在大量并發(fā)連接中只有少量活躍的情況下的系統(tǒng)CPU利用率。

但是這里我們其實(shí)只需要監(jiān)控的IO接口只有mWakeReadPipeFd一個(gè),即前面我們所創(chuàng)建的管道的讀端,為什么還需要用到epoll呢?有點(diǎn)用牛刀來(lái)殺雞的味道。

其實(shí)不然,這個(gè)Looper類是非常強(qiáng)大的,它除了監(jiān)控內(nèi)部所創(chuàng)建的管 道接口之外,還提供了addFd接口供外界面調(diào)用,外界可以通過(guò)這個(gè)接口把自己想要監(jiān)控的IO事件一并加入到這個(gè)Looper對(duì)象中去,當(dāng)所有這些被監(jiān)控  的IO接口上面有事件發(fā)生時(shí),就會(huì)喚醒相應(yīng)的線程來(lái)處理,不過(guò)這里我們只關(guān)心剛才所創(chuàng)建的管道的IO事件的發(fā)生。

我們?cè)倩氐絅ativeMessageQueue的構(gòu)造函數(shù)中,看看JNI層的Looper對(duì)象的創(chuàng)建過(guò)程,即看看它的構(gòu)造函數(shù)是如何實(shí)現(xiàn)的,這個(gè)Looper類實(shí)現(xiàn)在frameworks/base/libs/utils/Looper.cpp文件中:

[cpp] view plaincopyLooper::Looper(bool allowNonCallbacks) : mAllowNonCallbacks(allowNonCallbacks), mResponseIndex(0) { int wakeFds[2]; int result = pipe(wakeFds); ...... mWakeReadPipeFd = wakeFds[0]; mWakeWritePipeFd = wakeFds[1]; ...... #ifdef LOOPER_USES_EPOLL // Allocate the epoll instance and register the wake pipe. mEpollFd = epoll_create(EPOLL_SIZE_HINT); ...... struct epoll_event eventItem; memset(& eventItem, 0, sizeof(epoll_event)); // zero out unused members  data field union eventItem.events = EPOLLIN; eventItem.data.fd = mWakeReadPipeFd; result = epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mWakeReadPipeFd, & entItem); ...... #else ...... #endif ...... }

這個(gè)構(gòu)造函數(shù)做的事情非常重要,它跟我們后面要介紹的應(yīng)用程序主線程在消息隊(duì)列中沒(méi)有消息時(shí)要進(jìn)入等待狀態(tài)以及當(dāng)消息隊(duì)列有消息時(shí)要把應(yīng)用程序主線程喚醒的這兩個(gè)知識(shí)點(diǎn)息息相關(guān)。它主要就是通過(guò)pipe系統(tǒng)調(diào)用來(lái)創(chuàng)建了一個(gè)管道了:

  1. [cpp] view plaincopyint wakeFds[2]; 

  2. int result = pipe(wakeFds); 

  3. ...... 

  4. mWakeReadPipeFd = wakeFds[0]; 

  5. mWakeWritePipeFd = wakeFds[1];

要使用Linux系統(tǒng)的epoll機(jī)制,首先要通過(guò)epoll_create來(lái)創(chuàng)建一個(gè)epoll專用的文件描述符:

[cpp] view plaincopymEpollFd = epoll_create(EPOLL_SIZE_HINT);

傳入的參數(shù)EPOLL_SIZE_HINT是在這個(gè)mEpollFd上能監(jiān)控的***文件描述符數(shù)。

“Android構(gòu)造函數(shù)怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁(yè)名稱:Android構(gòu)造函數(shù)怎么實(shí)現(xiàn)
文章來(lái)源:http://weahome.cn/article/iejsdg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部