android常见面试题以及答案1.请描述下Activity的生命周期。2.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?3.如何将一个Activity设置成窗口的样式。(EditedbySodino)4.如何退出Activity?如何安全退出已调用多个Activity的Application?5.请介绍下Android中常用的五种布局。6.请介绍下Android的数据存储方式。(EditedbySodino)7.请介绍下ContentProvider是如何实现数据共享的。(EditedbySodino)8.如何启用Service,如何停用Service。(EditedbySodino)9.注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。10.请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。11.AIDL的全称是什么?如何工作?能处理哪些类型的数据?12.请解释下Android程序运行时权限与文件系统权限的区别。(EditedbySodino)13.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。14.有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。15.你如何评价Android系统?优缺点。1.Androiddvm的进程和Linux的进程,应用程序的进程是否为同一个概念DVM执行时,在linux看来就是一应用程序进程,所以说是同一概念2.sim卡的EF文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的4.嵌入式操作系统内存管理有哪几种,各有何特性页式,段式,段页,用到了MMU,虚拟空间等技术5.什么是嵌入式实时操作系统,Android操作系统属于实时操作系统吗?分硬实时和软实时,android属于linux内核,linux在用户空间可抢占,内核空间在2.4以后可局部抢占,严格来讲Android属于软实时系统6.一条最长的短信息约占多少byte?1、Androiddvm的进程和Linux的进程,应用程序的进程是否为同一个概念DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念。2、sim卡的EF文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的3、嵌入式操作系统内存管理有哪几种,各有何特性页式,段式,段页,用到了MMU,虚拟空间等技术4、什么是嵌入式实时操作系统,Android操作系统属于实时操作系统吗?嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。5、一条最长的短信息约占多少byte?中文70(包括标点),英文160,160个字节6、android中的动画有哪几类,它们的特点和区别是什么?两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。7、handler机制的原理andriod提供了Handler和Looper来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。1)Looper:一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。2)Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从MessageQueue取出)所送来的消息。3)MessageQueue(消息队列):用来存放线程放入的消息。4)线程:UIthread通常就是mainthread,而Android启动程序时会替它建立一个MessageQueue。8、说说mvc模式的原理,它在android中的运用MVC(Model_view_contraller)”模型_视图_控制器”。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。一,listview你是怎么优化的。二,view的刷新,之前说过三,IPC及原理四,Android多线程6n;五,Android为什么要设计4大组件,他们之间的联系,不设计行不行(主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好【Technicolor的面试官问的这个】)六,service的周期,activity的周期,谈下你对Android内部应用的了解,比如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉Android怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!尽量将每个技术点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这个应用中做那个模块,用了多少个类之类的问题。偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的?当然我面试过很多家单位,有的是做平板,手机,数字电视,有的是做出个erp之类的客户端等等,出于前面的三个,基本上都是将Android的全部改掉,如果真正要做Android的话,大家要学的还很多。总之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话,最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我说过,技术是不惜钱的,只要你有能力,多少钱他都请。确实,来北京求职期间,牛人真的很多,而且有的面试官也非常好,给了很多忠肯的意见。并不是每个面试官都特想为难你的~最主要的还是想知道你的技术,因为他们也是吃公司饭,得为这个负责。View重绘和内存泄露的好像是面试经常问的问题1.View的刷新:在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate.2.GC内存泄露出现情况:1.数据库的cursor没有关闭2.构造adapter时,没有使用缓存contentview衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/3.Bitmap对象不使用时采用recycle()释放内存4.activity中的对象的生命周期大于activity调试方法:DDMS==HEAPSZIE==dataobject==[TotalSize]还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个Hal层.这篇文章会涉及到以下几个内容一Activity的生命周期二让Activity变成一个窗口:Activity属性设定三你后台的Activity被系统回收怎么办:onSaveInstanceState四调用与被调用:我们的通信使者-Intent一Activity的生命周期和其他手机平台的应用程序一样,Android的应用程序的生命周期是被统一掌控的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并适应它。简单地说一下为什么是这样:我们手机在运行一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。如何优化Android中ListView滚动速度的方法他是让你滚动的快点还是慢点?慢的话:有个延迟加载数据的方法,在API的demo中。要是让ListView滚动速度快的话,你可以这样告诉他:让他的手指在屏幕上迅速的上下滑动,当他的手指移动速度达到100px/0.1秒后,就可以看到快速滑动的效果了!~Android的国际化与本地化internationalization(国际化)简称i18n,因为在i和n之间还有18个字符,localization(本地化),简称L10n。一般说明一个地区的语言时,用语言_地区的形式,如zh_CN,zh_TW.各国语言缩写国家和地区简写对i18n和L10n提供了非常好的支持。android没有专门的API来提供国际化,而是通过对不同resource的命名来达到国际化,同时这种命名方法还可用于对硬件的区分,如不同的新视屏用不同的图片。在eclipse的工程中,res目录有默认几项resource,如drawable,layout,menu,values其余还有res/anim/用来放置动画res/xml/用来放置styletheme等xml定义。res/raw/用来放置data数据我们引用这些resource时候,在java代码中是通过R.resource_type.resource_name的方式来使用,如setTitle(R.string.main_title);还有一种是在xml中直接引用,如TextViewandroid:id=@+id/hello_viewandroid:layout_width=fill_parentandroid:layout_height=wrap_contentandroid:text=@string/hello/引用了名字为hello的字符串。当程序运行时,通过Resource类会装载strings.xml中名字为hello的字符串。但Resource类装载strings.xml时会根据当前手机的设置来选择装载哪一个xml文件。这些手机设置有MCCandMNC,Languageandregion,Screendimensions,Wider/tallerscreens,Screenorientation,Screenpixeldensity,Touchscreentype,SDKversion,也就是说通过手机当前语言区域,屏幕的大小,屏幕像素,以及当前androidsdk的版本号来选择。通过把strings.xml放置在以这些选项命名的文件夹下,Resource类就能正确的装载所需的字符串。我们以不同的local和region来做一次国际化,首先values表示默认的字符串,也即当Resource找不到匹配的资源时,默认使用values文件夹下的资源,其余dra