几个安卓笔试题
来源:互联网 发布:淘宝商品上架流程 编辑:程序博客网 时间:2024/05/22 14:45
1.简述Andriod如何处理UI与耗时操作的通信,有哪些方式及各自的优缺点。
主要有三种方法,一为Handler,二为AsyncTask,三为自己开子线程执行耗时操作,然后调用Activity的runOnUiThread()方法更新ui;
handler机制是,在主线程中创建handler对象,
当执行耗时操作时,新建一个线程,在这个线程中执行耗时操作,通过调用handler的sendMessage,post等方法,更新ui界面;
AsyncTask本质上是一个线程池,所有的异步任务都会在这个线程池中的工作线程中执行,当需要操作ui界面时,会和工作线程通过handler传递消息。
自己开子线程执行耗时操作,然后调用Activity的runOnUiThread()方法更新ui,这种方法需要把context对象强制转换成activity后使用
handler机制的优点是 结构清晰,功能明确,但是代码过多;
asyncTask简单,快捷,但是可能会新开大量线程,消耗系统资源,造成FC
第三种方法最好用,代码也非常简单,只是需要传递context对象
2. Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。
1、线程间通信机制
首先,looper、handler、messagequeue三者共同实现了android系统里线程间通信机制。如在A、B两个子线程之间需要传递消息,首先给每个子线程绑定一套handler、looper、messagequeue机制,然后这三个对象都与其所属线程对应。然后A线程通过调用B线程的Handler对象,发送消息。这个消息会被Handler发送到B线程的messagequeue中,而属于B线程的Looper对象一直在for循环里无限遍历MessageQueue, 一旦发现该消息队列里收到了新的消息,就会去对消息进行处理,处理过程中会回调自身Handler的heandleMessage方法。从而实现了不同线程间通信。
2、Looper实现原理
Looper类里包含一个消息队列对象和一个线程对象。当创建Looper时,会自动创建一个消息队列,同时将内部线程对象指向创建Looper的线程。当开启Looper后(looper.loop()),会自动进入无限for循环中,不断去遍历消息队列,如果没有消息则阻塞,有消息则回调handler的handlemessage方法进行处理。
3、Looper.prepare()
首先,要使用Looper机制一般会在当前线程中创建Handler对象,里面会自动创建一个looper对象和消息队列,这里面的消息队列属于当前线程空间。但此时的looper还不会去遍历,也没有绑定到当前线程。其中,looper对象内部也包含一个空消息队列对象和空线程。通过Looper.prepare()方法,先让该消息队列指向当前线程的消息队列,让空线程也指向当前线程。从而实现了绑定。
0 0
- 几个安卓笔试题
- 安卓笔试题小结
- 几个笔试题分析
- 几个笔试题
- 几个笔试题
- 几个笔试题
- 做几个笔试题【一】
- 几个关于多线程笔试题
- 做几个笔试题【一】
- 几个笔试题(一)
- 几个SQL语句笔试题
- 安卓APP 几个名词解释
- 企业级Android安卓笔试题,面试题第一篇
- 一份安卓笔试题的反思改错
- 新太科技的几个笔试题
- 遇到的几个奇怪的笔试题
- 最近几个公司的笔试题
- 常见的几个小笔试题
- python 返回json 中文乱码
- UI控件圆角设置
- 快捷键
- Linux(Ubuntu)下面SecureCRT 完全破解
- [HDU 2692] Ball · 二分答案+最短路
- 几个安卓笔试题
- hdu 3974 Assign the task (线段树)
- C语言字符串操作函数整理
- 漫谈理想
- 完美监视你的应用程序--Xamarin洞察
- 快速排序的一种方法
- 将vim初步配置可以编译的编辑器(for windows)
- bzoj 3309 DZY Loves Math
- centos安装nginx