而ANR事件就是在 InputDispatcher 中產(chǎn)生的。InputDispatcher 內(nèi)部維護(hù)了一個線程 InputDispatcherThread ,輸入事件在這個線程中進(jìn)行處理。這個線程在 InputManager 中進(jìn)行創(chuàng)建和啟動。
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站制作與策劃設(shè)計,五蓮網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:五蓮等地區(qū)。五蓮做網(wǎng)站價格咨詢:18982081108
引發(fā)ANR的原因:在Android里,應(yīng)用程序的響應(yīng)性是由Activity Manager和WindowManager系統(tǒng)服務(wù)監(jiān)視的 。
當(dāng)應(yīng)用發(fā)生 ANR 之后,系統(tǒng)會收集許多進(jìn)程,來 dump 堆棧,從而生成 ANR Trace 文件。收集的第一個,也是一定會被收集到的進(jìn)程,就是發(fā)生 ANR 的進(jìn)程。
Android應(yīng)用中的ANR(ApplicationNotResponding)指的是當(dāng)應(yīng)用程序無法響應(yīng)用戶輸入或事件,導(dǎo)致程序停頓、出現(xiàn)卡頓甚至崩潰的情況。ANR問題可能影響用戶的使用體驗和造成不必要的損失。
Android應(yīng)用程序通常運行在一個main線程。如果主線程里占用了太長的時間的話,程序沒有機會處理輸入或者Intent廣播就會引發(fā)ANR無響應(yīng)。因此,主線程里的任何方法都盡可能少做事情。
ANR是Application Not Responding的簡稱,主要是說應(yīng)用程序出現(xiàn)無響應(yīng)的情況。
1、Android中對視圖的Touch事件進(jìn)行分發(fā)處理。
2、android的view管理是以window為單位的,每個window對應(yīng)一個view樹。Window機制不僅管理著view的顯示,也負(fù)責(zé)view的事件分發(fā)。
3、DecorView.java Activity.java ViewGroup.java View.java 通過該方法,接收器receiver的onKeyDown、onKeyUp、onKeyLongPress、onKeyMultiple等方法將被回調(diào)。
1、(1) 事件從Activity.dispatchTouchEvent()開始傳遞,只要沒有被停止或攔截,從最上層的View(ViewGroup)開始一直往下(子View)傳遞。子View可以通過onTouchEvent()對事件進(jìn)行處理。
2、Android 事件傳遞機制是 先分發(fā)再處理 ,先由外部的 View 接收,然后依次傳遞給其內(nèi)層的 View,再從最內(nèi)層 View 反向依次向外層傳遞。
3、事件的起源:我們都知道觸摸事件是從Activity的dispatchTouchEvent方法開始的。再調(diào)用父類的super.dispatchTouchEvent(ev),事件向派發(fā)。
4、當(dāng)為true的時候則說明父控件(也就是viewPager)不攔截事件,點擊事件由子控件(也就是webView)來處理,反之為false的時候,父控件則攔截點擊事件,子控件無法響應(yīng)點擊事件。
5、View類實現(xiàn)了KeyEvent.Callback接口中的一系列回調(diào)函數(shù),因此,基于回調(diào)的事件處理機制通過自定義View來實現(xiàn),自定義View時重寫這些事件處理方法即可。Handler是一個消息分發(fā)對象。