面试遇到的android问题及解答

面试遇到的android问题及解答

ID:39585645

大小:664.50 KB

页数:27页

时间:2019-07-06

面试遇到的android问题及解答_第1页
面试遇到的android问题及解答_第2页
面试遇到的android问题及解答_第3页
面试遇到的android问题及解答_第4页
面试遇到的android问题及解答_第5页
资源描述:

《面试遇到的android问题及解答》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1、AndroidANRANR:ApplicationNotResponding,即应用无响应。ANR一般有三种类型:1.KeyDispatchTimeout(5seconds)--主要类型按键或触摸事件在特定时间内无响应2.BroadcastTimeout(10seconds)--BroadcastReceiver在特定时间内无法处理完成3.ServiceTimeout(20seconds)--小概率类型Service在特定的时间内无法处理完成超时时间的计数一般是从按键分发给app开始。超时的原因一

2、般有两种:(1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)(2)当前的事件正在处理,但没有及时完成如何避免KeyDispatchTimeout1.UI线程尽量只做跟UI相关的工作2.耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理3.尽量用Handler来处理UIthread和别的thread之间的交互说了那么多的UI线程,那么哪些属于UI线程呢?UI线程主要包括如下:1.Activi

3、ty:onCreate(),onResume(),onDestroy(),onKeyDown(),onClick(),etc2.AsyncTask:onPreExecute(),onProgressUpdate(),onPostExecute(),onCancel,etc3.Mainthreadhandler:handleMessage(),post*(runnabler),etc4.other从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CP

4、U饥饿导致了ANR如果CPU使用量很少,说明主线程被BLOCK了如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的除了看LOG,解决ANR还得需要trace.txt文件,如何获取呢?可以用如下命令获取$chmod777/data/anr$rm/data/anr/traces.txt$ps$kill-3PIDadbpulldata/anr/traces.txt./mytraces.txt    从trace.txt文件,看到最多的是如下的信息:说明主线程在等待下条消息进入消息队列如何调

5、查并解决ANR1.首先分析log2.从trace.txt文件查看调用stack.3.看代码4.仔细查看ANR的成因(iowait?block?memoryleak?)1、android事件分发1、基础知识(1)所有Touch事件都被封装成了MotionEvent对象,包括Touch的位置、时间、历史记录以及第几个手指(多指触摸)等。(2)事件类型分为ACTION_DOWN,ACTION_UP,ACTION_MOVE,ACTION_POINTER_DOWN,ACTION_POINTER_UP,ACTIO

6、N_CANCEL,每个事件都是以ACTION_DOWN开始ACTION_UP结束。(3)对事件的处理包括三类,分别为传递——dispatchTouchEvent()函数、拦截——onInterceptTouchEvent()函数、消费——onTouchEvent()函数和OnTouchListener2、传递流程(1)事件从Activity.dispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的View(ViewGroup)开始一直往下(子View)传递。子View可以通过

7、onTouchEvent()对事件进行处理。(2)事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()对事件做拦截,停止其往下传递。(3)如果事件从上往下传递过程中一直没有被停止,且最底层子View没有消费事件,事件会反向往上传递,这时父View(ViewGroup)可以进行消费,如果还是没有被消费的话,最后会到Activity的onTouchEvent()函数。(4)如果View没有对ACTION_DOWN进行消费,之后的其

8、他事件不会传递过来。(5)OnTouchListener优先于onTouchEvent()对事件进行消费。上面的消费即表示相应函数返回值为true。Android中事件传递按照从上到下进行层级传递,事件处理从Activity开始到ViewGroup再到View。事件传递方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前两个是View和ViewGroup都有的,最后一个是只有ViewG

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。