国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Android】app中阻塞的looper為什么可以響應(yīng)touch事件

這篇具有很好參考價值的文章主要介紹了【Android】app中阻塞的looper為什么可以響應(yīng)touch事件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

這里,我們考慮一個問題,Android中的應(yīng)用是一個looper線程,沒有任務(wù)時就阻塞著,其他線程通過handler調(diào)用等方式向主線程looper發(fā)送任務(wù),

【Android】app中阻塞的looper為什么可以響應(yīng)touch事件,Android Input系統(tǒng),Android,Android

如果點(diǎn)擊應(yīng)用上的按鈕,應(yīng)用是怎么及時響應(yīng)的呢,

是專門啟動了一個額外的線程去監(jiān)控input事件么?

這里直接給出答案,input事件傳送給了系統(tǒng)IMS,IMS通過inputchannel把input傳送給應(yīng)用,而應(yīng)用中的主線程looper監(jiān)控了inputchannel的fd,

這里看一下主線程looper是怎么實(shí)現(xiàn)的監(jiān)控inputchannel的fd。

在應(yīng)用創(chuàng)建的時候,會調(diào)用ViewRootImpl的serView方法,

frameworks/base/core/java/android/view/ViewRootImpl.java

setView

mInputEventReceiver = new?WindowInputEventReceiver(inputChannel,

Looper.myLooper());

這里傳入了主線程的looper給WindowInputEventReceiver

這個構(gòu)造方法,調(diào)用其父類的構(gòu)造

public?InputEventReceiver(InputChannel?inputChannel, Looper?looper) {

if?(inputChannel?== null) {

throw?new?IllegalArgumentException("inputChannel must not be null");

}

if?(looper?== null) {

throw?new?IllegalArgumentException("looper must not be null");

}

mInputChannel?= inputChannel;

mMessageQueue?= looper.getQueue();

mReceiverPtr?= nativeInit(new?WeakReference<InputEventReceiver>(this),

mInputChannel, mMessageQueue);

mCloseGuard.open("InputEventReceiver.dispose");

}

static?jlong?nativeInit(JNIEnv* env, jclass?clazz, jobject?receiverWeak,

jobject?inputChannelObj, jobject?messageQueueObj) {

std::shared_ptr<InputChannel> inputChannel?=

android_view_InputChannel_getInputChannel(env, inputChannelObj);

if?(inputChannel?==?nullptr) {

jniThrowRuntimeException(env, "InputChannel is not initialized.");

return?0;

}

sp<MessageQueue> messageQueue?= android_os_MessageQueue_getMessageQueue(env, messageQueueObj);

if?(messageQueue?==?nullptr) {

jniThrowRuntimeException(env, "MessageQueue is not initialized.");

return?0;

}

sp<NativeInputEventReceiver> receiver?= new?NativeInputEventReceiver(env,

receiverWeak, inputChannel, messageQueue);

status_t?status?= receiver->initialize();

其中,receiver->initialize();

調(diào)用到

status_t?NativeInputEventReceiver::initialize() {

setFdEvents(ALOOPER_EVENT_INPUT);

return?OK;

}

void?NativeInputEventReceiver::setFdEvents(int?events) {

if?(mFdEvents?!= events) {

mFdEvents?= events;

auto&& fd?= mInputConsumer.getChannel()->getFd();

if?(events) {

mMessageQueue->getLooper()->addFd(fd.get(), 0, events, this, nullptr);

} else?{

mMessageQueue->getLooper()->removeFd(fd.get());

}

}

這里,打不過就加入,把inputchannel的fd也加入到主線程looper的epool監(jiān)控之中。文章來源地址http://www.zghlxwxcb.cn/news/detail-816053.html

到了這里,關(guān)于【Android】app中阻塞的looper為什么可以響應(yīng)touch事件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 20 信任鏈:為什么可以相信一個 HTTPS 網(wǎng)站?

    20 信任鏈:為什么可以相信一個 HTTPS 網(wǎng)站?

    現(xiàn)實(shí)的生活當(dāng)中,如果想證明一份合同沒有被修改過,人們會在合同上蓋一個齊縫章,并附上自己的簽名。簽名和蓋章其實(shí)是一個含義,目的是證明自己簽署過某份協(xié)議,而且一經(jīng)簽署,協(xié)議就不能再變更。 如果想阻止一份合同被修改,最容易想到的方式是加密 。合同一旦

    2024年02月21日
    瀏覽(31)
  • 電腦顯卡驅(qū)動停止響應(yīng)該怎么辦?為什么會出現(xiàn)這種情況

    電腦顯卡驅(qū)動停止響應(yīng)該怎么辦?為什么會出現(xiàn)這種情況

    當(dāng)你電腦突然彈框說顯卡驅(qū)動停止響應(yīng),你知道是出現(xiàn)什么問題了嗎,下面我們?yōu)榇蠹铱偨Y(jié)了有可能造成顯卡驅(qū)動停止響應(yīng)的原因。 1.?? ?過熱: 顯卡在長時間高負(fù)載下可能會過熱,導(dǎo)致驅(qū)動停止響應(yīng)。過高的溫度可能損壞顯卡或?qū)е孪到y(tǒng)不穩(wěn)定。 2.?? ?顯卡驅(qū)動問題:

    2024年02月04日
    瀏覽(32)
  • 提問:為什么postman 里沒有cookie 也能獲取無安全驗(yàn)證的響應(yīng)?

    提問:為什么postman 里沒有cookie 也能獲取無安全驗(yàn)證的響應(yīng)?

    為什么 使用postman發(fā)送請求和用python request 發(fā)起請求,都沒有使用cookie但是在postman 中可以獲取百度手機(jī)號的響應(yīng),但是python request 不能,而是得到一個安全驗(yàn)證界面。 已經(jīng)經(jīng)Disable cookie jar了,且刪除了響應(yīng)cookies 緩存。 歡迎下面發(fā)表您的見解~

    2024年02月12日
    瀏覽(18)
  • Linux中vim為什么直接可以操作jar包

    今天上線遇到了令人迷惑的問題,寬哥大佬排查的時候用vim直接查看了jar包,感覺很神奇,所以查了查資料; 學(xué)無止境!! JAR 文件的本質(zhì): JAR(Java ARchive)文件是 Java 平臺上用于封裝 Java 類文件、相關(guān)的元數(shù)據(jù)和資源文件的壓縮包。JAR 文件使用了 ZIP 文件格式進(jìn)行壓縮和存

    2023年04月26日
    瀏覽(25)
  • 路由器劫持是什么意思為什么要劫持路由器有哪些方法可以防范

    繼“棱鏡門”事件之后,網(wǎng)絡(luò)安全也隨之被各大媒體關(guān)注,近段時間有不少媒體報(bào)道,全球擁有大量的路由器遭入侵、路由器被劫持等等。另外在如今越來越多的無線網(wǎng)絡(luò)環(huán)境中,蹭網(wǎng)也是常常被人們提及,那么路由器劫持是什么意思?怎么看路由器是否被劫持?針對這兩個

    2024年02月07日
    瀏覽(31)
  • 手機(jī)wifi可以連接路由器但是上不了網(wǎng),為什么?

    手機(jī)wifi可以連接路由器但是上不了網(wǎng),為什么?

    本文轉(zhuǎn)載自:路由器知識庫:www.luyouqiset.cn 詳細(xì)介紹無線路由器設(shè)置后卻上不了網(wǎng)的解決辦法。但我們拿到路由器后一般都是按照說明書,一步一步登陸后臺去設(shè)置無線路由器。結(jié)果辛辛苦苦設(shè)置完后,發(fā)現(xiàn)手機(jī),筆記本電腦都夠連接到tplink路由器的網(wǎng)絡(luò)但上不了網(wǎng)。氣憤到先

    2024年02月11日
    瀏覽(25)
  • 為什么網(wǎng)絡(luò)可以ping通,還是不能ssh到目標(biāo)主機(jī)?

    ??做運(yùn)維工作,我們都是通過遠(yuǎn)程的方式去連接一臺服務(wù)器或者虛擬機(jī),很多初次做運(yùn)維的朋友可能經(jīng)常會遇到這樣一個問題:我ping目標(biāo)服務(wù)器的IP是通的,但是我通過ssh卻不能連上主機(jī)。今天,就來淺談一下,為什么你ping網(wǎng)絡(luò)是通的,但是卻不能連接到遠(yuǎn)程主機(jī),當(dāng)你弄

    2024年02月09日
    瀏覽(27)
  • MySQL可重復(fù)讀隔離級別下,樂觀鎖為什么可以生效?

    今天蹦出一個很蠢的問題,來記錄一下 MySQL在可重復(fù)讀事務(wù)隔離級別下,通過版本號實(shí)現(xiàn)的樂觀鎖可以生效嗎? 舉個例子:開啟了兩個事務(wù)一和二,在事務(wù)一中對某條數(shù)據(jù)進(jìn)行了修改,版本號發(fā)生變化。但是在事務(wù)二中,查詢這條記錄的版本號,并沒有發(fā)生變化,怎么確定這

    2024年02月07日
    瀏覽(20)
  • 0062__對象指針為NULL,為什么還是可以調(diào)用成員函數(shù)

    對象指針為NULL,為什么還是可以調(diào)用成員函數(shù)_空對象指針為什么能調(diào)用函數(shù)_一顆石頭崽兒的博客-CSDN博客

    2024年02月10日
    瀏覽(16)
  • 為什么說云蜜罐可以讓安全防御工作由被動變主動

    為什么說云蜜罐可以讓安全防御工作由被動變主動

    蜜罐技術(shù)本質(zhì)上是一種對攻擊方進(jìn)行欺騙的技術(shù),通過布置一些作為誘餌的主機(jī)、網(wǎng)絡(luò)服務(wù)或者信息,誘使攻擊方對它們實(shí)施攻擊,從而可以對攻擊行為進(jìn)行捕獲和分析,了解攻擊方所使用的工具與方法,推測攻擊意圖和動機(jī),能夠讓防御方清晰地了解他們所面對的安全威脅

    2024年04月10日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包