1、 . . . . Android笔试题一、选择题1. 对一些资源以与状态的操作保存,最好是保存在生命周期的哪个函数中进展(d) A、onPause() B、onCreate() C、 onResume()D、onStart()2. android 中以下属于Intent的作用的是(c) A、实现应用程序间的数据共享B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带D、处理一个应用程序整体性的工作3. 下面的对自定style的方式正确的选项是(a)A、 fill_parentB、 fil
2、l_parent C、 fill_parentD、 fill_parent4. android 关于service生命周期的onCreate()和onStart()说确的是(ad)(多项选择题) A、当第一次启动的时候先后调用onCreate()和onStart()方法B、当第一次启动的时候只会调用onCreate()方法C、如果service已经启动,将先后调用onCreate()和onStart()方法D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法5. Android项目工程下面的assets目录的作用是什么bA、放置应用到的图片资源。B、
3、主要放置多媒体等数据文件C、放置字符串,颜色,数组等常量数据D、放置一些与UI相应的布局文件,都是xml文件二、填空题6. android中常用的四个布局是framlayout,linenarlayout,relativelayout和tablelayout。7. android 的四大组件是activiey,service,broadcast和contentprovide。8. android 中service的启动方法是:startservice和bindservice。9. activity一般会重载7个方法用来维护其生命周期,除了onCreate(),onStart(),onDesto
4、ry()外,还有onrestart,onresume,onpause,onstop。10. android的数据存储的方式sharedpreference,文件,SQlite,contentprovider,网络。11. 当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行 的回调函数是startActivityResult()。12. 注册广播有两种常见的方式:使用代码进展注册 和 AndroidManifest.xml中声明。三、 问答题1、 谈谈你对同步和异步的理解和区别,在android中实现异步的常用方式以与区别。AsyncTask和Ha
5、ndler两种异步方式 AsyncTask实现的原理,和适用的优缺点l 过程可控缺点:l 在使用多个异步操作和并需要进展Ui变更时,就变得复杂起来. Handler异步实现的原理和适用的优缺点在Handler 异步实现时,涉与到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread子线程thread(子线程)运行并生成Message-Looper获取Message并传递给HandlerHandler逐个获取Looper中的Message,并进展UI变更。使用的优点:l 结构清晰,功能定义明确l 对于多个后台任务时,简单,清晰使用的缺点:
6、l 在单个后台异步处理时,显得代码过多,结构过于复杂相对性2、 谈谈你对协议的理解,以与发送请求的常用方法和他们的区别。1、GET请求的数据会附在URL之后就是把数据放置在协议头中,以?分割URL和传输数据,参数之间以&相连,2、POST把提交的数据那么放置在是包的包体中。3、GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据3、android中线程间是怎样通信的。andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原那么。Looper类用来管理特定线程对象之间的消息交换(MessageExchange)。1)Loo
7、per: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。3) Message Queue(消息队列):用来存放线程放入的消息。4)线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。四、程序设计1、谈谈你对观察者设计模式的理解,请以编写简单的示例代码。2、实际问题:随着android的迅速崛
8、起,android广告平台也跟着产生,就光国就几十家,如果开发者对每个广告平台都进展集成的话是一件很费力不讨好的事情,因为开发者需要阅读各个广告平台的文档,编写代码以与维护等,如果让你为开发者解决该问题的话即为开发者设计一个聚合多家广告平台的sdk,开发者使用该sdk后可以切换这广告平台的展示。你该怎么做。假设现在有三家广告平台,请设计一个sdk聚合这三家广告平台,把这个sdk给开发者用,开发者使用该sdk后,就像使用一家广告平台一样,他们不需要阅读这三家广告平台的文档,只需要阅读我们sdk的文档即可假设平台广告的广告只要请求就可展示,无需其他信息。具体要求:1、 广告在30秒后切换下一个广告
9、平台,下一个广告平台随机生成。2、编写示例代码面试题目1、 谈谈你对面向对象以与面向对象的程序设计的理解,特征。2、 对android中分辨率,密度的了解以与在android中怎样处理由于分辨率问题。3、 谈谈你对线程和后台服务的理解和区别。4、 关于android开发中如何调试,如何查看log5、 android的存管理,导致android存泄露的原因,以与在android中怎样分析存泄露。在Java中,存的分配是由程序完成的,而存的释放是由垃圾收集器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放存,但它只能回收无用并且不再被其它对象引用的那些对象所占用
10、的空间。 导致存泄漏主要的原因是,先前申请了存空间而忘记了释放。如果程序中存在对无用对象的引用,那么这些对象就会驻留存,消耗存,因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用,这个对象就被定义为有效的活动,同时不会被释放。要确定对象所占存将被回收,我们就要务必确认该对象不再会被使用。典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要时,不需明显的设为null,因为一个方法执行完毕时,这些引用会自动被清理。 在Java中,存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是有被引用的,即在有向树形图中,存在树枝通路可以与其
11、相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的存泄漏,这些对象不会被GC所回收,然而它却占用存。 强引用:引用为空的时候,Java的垃圾回收器会处理。一般来说自己写的程序大局部都是强引用。 软引用:堆存不够的时候,Java的垃圾回收器会处理这类引用。 弱引用:Jave的垃圾回收器每次都会回收这类引用。如何用MAT来分析,前提是Android开发和测试的工具安装完整,SDK,Eclipse: 1.打开Eclipse 2.选择 Help-Install New Software; 3.在Work with中添加站点:downlo
12、ad.eclipse.org/mat/1.0/update-site/(这个地址可能会变化,但是新的地址可以在官方上找到:.eclipse.org/mat/downloads.php ) 4.生成.hprof文件:插入SD卡(Android机器很多程序都需要插入SD卡),并将设备连接到PC,在Eclipse中的DDMS中选择要测试的进程,然后点击Update Heap 和Dump HPROF file两个Button。 .hprof 文件会自动保存在SD卡上,把 .hprof 文件拷贝到PC上的 android-sdk-windowstools目录下。这个由DDMS生成的文件不能直接在MAT打
13、开,需要转换。 运行cmd打开命令行,cd到 android-sdk-windowstools所在目录,并输入命令hprof-conv xxxxx.hprof yyyyy.hprof,其中xxxxx.hprof为原始文件,yyyyy.hprof为转换过后的文件。转换过后的文件自动放在android-sdk-windowstools 目录下。 OK,到此为止,.hprof文件处理完毕,可以用来分析存泄露情况了。 5.打开MAT: 在Eclipse中点击Windows-Open Perspective-Other-Memory Analysis 6.导入.hprof文件 在MAT中点击 File-
14、Open File,浏览到刚刚转换而得到的.hprof文件,并Cancel掉自动生成报告,点击Dominator Tree,并按Package分组,选择自己所定义的Package 类点右键,在弹出菜单中选择List objects-With incoming references。 这时会列出所有可疑类,右键点击某一项,并选择Path to GC Roots-exclude weak/soft references,会进一步筛选出跟程序相关的所有有存泄露的类。据此,可以追踪到代码中的某一个产生泄露的类。 6、 JNI和NDK的区别android常用的开发方式是java封装的库,而这些库的底层实
15、现是由C/C+实现,如媒体,图形库等java调用这样实现就需要用JNIJava Native Interface平时用的也就是google给我们封装的好的库,即便是底层实现用的不是Java,但都有统一的Java接口而NDK的作用是“我们自己写本地代码C/C+),自己用JNI封装成Java接口比如我们想做个计算,二这不是Java的强项,可以用C/C+来写实现,返回一个运算结果就行了NDKr5已经实现了不用写一行Java代码开发程序了,只不过还是用到了虚拟机,细节被封装隐藏起来了而已JNI是Java调用Native机制,是Java语言自己的特性全称为 Java Native Interface,类
16、似的还有微软.Net Framework上的p/invoke,可以让C#或Visual Basic.Net可以调用C/C+的API,所以说JNI和Android没有关系,在PC上开发Java的应用,如果运行在Windows平台使用 JNI是是经常的,比如说读写Windows的注册表。NDK是Google公司推出的帮助Android开发者通过C/C+本地语言编写应用的开发包,包含了C/C+的头文件、库文件、说明文档和示例 代码,我们可以理解为Windows Platform SDK一样,是纯C/C+编写的,但是Android并不支持纯C/C+编写的应用,同时NDK提供的库和函数功能很有限,仅仅处理些算法效率敏感的 问题。7 / 7
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100