Android笔试题带答案_第1页
Android笔试题带答案_第2页
Android笔试题带答案_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、读书破万卷下笔如有神android 笔试题大全1 .请解释下在单线程模型中 message,handler,message queue,looper之间的关系。1、拿主线程来说,主线程启动时会调用 looper.prepare()方法,会初始化一个 looper, 放入 threadlocal 中接着调用 looper.100p(木断遍历 message queue 2、handler的创建依赖与当前线程中的looper,如果当前线程没有looper则必 须调用 looper.prepare。3、handler通过调用sendmessage(方法讲消息放入 messagequeue中, mes

2、sagequeue是一个先进先出的队列,looper不断从messagequeue中取出消 息,把消息交给消息对应的handler对象进行分发处理。2 .内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?1、内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大 内存。2、内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。3、内存优化:android中容易内存溢出的部分,就是图片的加载,我们可以使用 对图片的压缩并且使用lrucache缓存的目的来控制图片所能够使用的内存。对 比较耗资源的对象及时的关闭,例如database conn流对象,游标,各种传

3、感器, service 等等。3 .asynctasl#用在哪些场景?它的缺陷是什么?如何解决?1、asynctask运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的ui进行更新。2、缺陷:asynctas。维护着一个长度为128的线程池,同时可以执行5个工作 线程,还有一个缓冲队列,当线程池中已有 128个线程,缓冲队列已满时,此时 如果仍然向线程提交任务,将会抛出rejectedexecutionexception3、解决:由一个控制线程来处理asynctask勺调用判断线程池是否满了,如果满 了则线程睡眠否则请求asynctask昧续处理。4

4、 .同一个程序,但不同的activity是否可以放在不同的taske务栈中?可以放在不同的task中。需要为不同的activity设置不同的affinity属性,启动 activity 的 intent 需要包含 flag_activity_new_task己。5 .assets资源文件夹和res资源文件夹的区别?1、assets所有资源不会在r.java文件下生成相应的标记,assets文件夹可以自己 创建文件夹,必须使用assetsmanager类进行访问,存放到这里的资源在运行打 包的时候都会直接打入程序安装包中,2、res:所有资源会在r.java文件下生成标记,这里的资源会在运行打包

5、操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。资源会编译成二进制文件进行打包。3、在res文件夹下还可以定义一下目录:res/anim:这里存放的是动画资源。res/xml:可以在activity中使用getresource().getxml(族取这里的资源文件res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getresource().openrawresources(ild),中参数 id 的形式是 r.raw.xxx.6 .横竖屏切换时候activity的生命周期?1、不设

6、置activity的android:configchanges时,切屏会重新调用各个生命周期, 切横屏时会执行一次,切竖屏时会执行两次。2、设置 activity 的 android:configchanges=orientation时,切屏还是会重新调用 各个生命周期,切横、竖屏时只会执行一次。3、设置 activity 的 android:configchanges=orientation|keyboardhidden时,切屏 不会重新调用各个生命周期,只会执行 onconfigurationchanged方法。4.0之后 多配置一个属性screensize7 .aidl的全称是什么?如何

7、工作?1、全称是: android interface define language2、aidl是一种接口描述语言。编译器可以通过 aidl文件生成一段代码,通过预 先定义的接口达到两个进程内部通信进程的目的.如果需要在一个activity中, 访问另一个service中的某个对象,需要先将对象转化成aidl可识别的参数(可能 是多个参数),然后使用aidl来传递这些参数,在消息的接收端,使用这些参数 组装成自己需要的对象.aidl的ipc的机制是基于接口,轻量级的。它使用代理 类在客户端和实现层间传递值。3、使用aidl,需要完成2件事情:1.引入aidl的相关类.2.调用aidl产生的c

8、lass 文件。8 .anr异常是什么?如何解决?1、在android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户 显示一个对话框,这个对话框称作应用程序无响应(anr: application not responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强 制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示 anr给用户。默认情况下,在 android中activity的最长执行时间是5秒, broadcastreceive的最长执行时间则是10秒。2、anr异

9、常也是在程序中自己经常遇到的问题,主要的解决办法自己最常用的 就是不要在主线程中做耗时的操作,而应放在子线程中来实现,比如采用 handler+mesage的方式,或者是有时候需要做一些和网络相互交互的耗时操作就 采用asyntask异步任务的方式(它的底层其实 handler+mesage有所区别的是它 是线程池)等,在主线程中更新 ui。9.oom异常是什么?如何解决?1、oom就是内存溢出,即 out of memory。也就是说内存占有量超过了 vm所 分配的最大。2、使用bitmap的时候容易出现oom。解决办法:1.进行图片压缩,2.采用lrucache 进行内存管理。lrucac

10、he实现原理是linkedhashmap存储,当内存不够用的时候, 将近期最少使用的数据从缓存中移除,保留使用最频繁的数据。3.异步加载。10 .做过哪些listview的内存优化?1、复用 convertview2、绑定 viewholder,减少 findviewbyid()的次数3、listview的分页显示,实现上拉加载和下来刷新。4、网络图片的异步加载和三级缓存。11 .如果后台的activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?1、onsaveinstancestate()t法2、当你的程序中某一个 activity a在运行时,主动或被动地运行另一个新的 activity b,这个时候 a会执行onsaveinstancestate() b完成以后又会来找 a,这 个时候就有两种情况:一是 a被回收,二是a没有被回收,被回收的a就要重 新调用oncreate()方法,不同于直接启动的是这回oncreate()里是带上了参数savedinstancestate而没被收回的就直接执行 on

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论