企业面试题(30题)--android.docx_第1页
企业面试题(30题)--android.docx_第2页
企业面试题(30题)--android.docx_第3页
企业面试题(30题)--android.docx_第4页
企业面试题(30题)--android.docx_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

Android面试题(共30题)注:难度题目5分一道,如果能顺利答出2道,就给10分;中等题目3.5分一道,容易的题目2分一道。简单类题目1. 谈谈UI中, Padding和Margin有什么区别?答:Padding 控件对内边距, margin是控件对父边距.2. ListView如何提高其效率?答:复用getView方法的convertview,利用viewholder持有者模式3.请介绍下Android中常用的五种布局。答:FrameLayout(框架布局)LinearLayout (线性布局)AbsoluteLayout(绝对布局)RelativeLayout(相对布局)TableLayout(表格布局)4android 的四大组件?答:activiey,service,broadcast和contentprovide。5:如何将一个Activity设置成窗口的样式。 答:AndroidManifest.xml 中定义android:theme=android:style/Theme.Dialog或 android:theme=android:style/Theme.Translucent就变成半透明的6. .java.io包中主要用于对对象(Object)的读写?答:objectinputstream和objectoutputstream类7:简述Android应用程序结构是哪些? 答:Android应用程序结构是:Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c+核心库)、ApplicationFramework(开发框架包)、Applications (核心应用程序)8.属于Runtime Exception的异常举例说明:?ArithmeticException,NullPionterException, BufferUnderflowException,IllegalArgumentException9: 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?答:在”onPause”状态将数据保存10:Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念答:DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念。中等类题目11两个Activity之间跳转时必然会执行的是那几个方法?答:startActivity(Intent intent) ; startActivityForResult (Intent intent, int requestCode) ;onActivityResult (int requestCode, int resultCode, Intent data);setResult(int resultCode);12Service有哪些启动方法?有什么区别?答:需要通过某一个Activity或者其他Context对象来调用, Context.startService() 和Context.bindService()。两种启动Service的方式有所不同 :如果在Service的onCreate或者onStart做一些很耗时间的事情,最好在 Service里启动一个线程来完成,因为Service是跑在主线程中,会影响到UI操作或者阻塞主线程中的其他事情。13.为什么要用ContentProvider?它和sql的实现上有什么差别?答:屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了不同app之间共享,操作数据Sql也有增删改查的方法. 但是contentprovider 还可以去增删改查本地文件.14广播的生命周期?答:广播的生命周期是非常短的,当发送之后intent会到AndroidManifest.xml文件中找是不是有匹配的action,如果有就会调用Receiver ,然后获得Receiver 对象,再执行onReceive方法,这时候Receiver对象就没有用了,当我们再次点击按钮的时候就会重新获得对象,这就是BroadcastReceiver的生命周期.在BroadcastReceiver里不能做一些比较耗时的操作,否侧会弹出ANR(Application NoResponse)的对话框.如果需要完成一项比较耗时的工作,应该通过发送Intent给Service,由Service来完成.这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束,BroadcastReceiver就先结束了.BroadcastReceiver一旦结束,此时BroadcastReceiver的所在进程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程).如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死.所以采用子线程来解决是不可靠的.15. 请简述Activity的生命周期答:在系统中的Activity被一个Activity栈所管理。当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到新的Activity退出为止.Activity有四种本质区别的状态:1)在屏幕的前台(Activity栈顶),叫做活动状态或者运行状态(active or running)2)如果一个Activity失去焦点,但是依然可见(一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶),叫做暂停状态(Paused)。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被杀掉。3)如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被杀掉。4)如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接杀掉它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。Activity提供了7个生命周期方法:onCreate(),onStart(),onResume(),onPause(),onStop(),onDestory(),onRestart()。在这七个生命周期方法中有三个关键的循环。从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在 onDestory()释放所有的资源。首先我们运行程序,这是打开MainActivity依次调用onCreate-onStart-onResume,这时MainActivity在栈顶,与我们交互的Activity都在栈顶。然后我按下返回键,则会依次调用onPause-onStop-onDestory。这属于一个完整的生命周期。16. Android中数据的存储方式有哪些答:1.SharedPreferences方式2.文件存储方式3.SQLite数据库方式4.内容提供器(Content provider)方式5. 网络存储方式17. 什么是ANR,应如何避免?答:ANR(Application Not Responding):应用程序无应答。默认情况下,在android中Activity的最长阻塞时间是5秒,BroadcastReceiver的最长执行时间则是10秒。为了避免出现ANR,可以在做比较耗时操作时,尽量使用子线程或Service。18. 说说mvc模式的原理,它在android中的运用 答:MVC 是 Model,View,Controller 的缩写,从上图可以看出 MVC 包含三个部分:模型( Model )对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。视图( View )对象:是应用程序中负责生成用户界面的部分。也是在整个MVC 架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。控制器( Control )对象:是根据用户的输入,控制用户界面数据显示及更新Model 对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给 M 哦得了处理。Android 鼓励弱耦合和组件的重用,在 Android 中 MVC 的具体体现如下1) 视图层( view ) :一般采用 xml 文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对 android 了解的比较的多了话,就一定可 以想到在 android 中也可以使用javascript+html 等的方式作为 view 层,当然这里需要进行 java 和 javascript 之间的通 信,幸运的是, android 提供了它们之间非常方便的通信实现。2) 控制层( controller ): android 的控制层的重 任通常落在了众多的 acitvity 的肩上,这句话也就暗含了不要在 acitivity 中写代码,要通过 activity 交割 model 业务逻辑层处理, 这样做的另外一个原因是 android 中的 acitivity 的响应时间是 5s ,如果耗时的操作放在这里,程序就很容易被回收掉。3) 模型层( model ): 对数据库的操作、对网络等的操作都应该在 model 里面处理,当然对业务计算等操作也是必须放在的该层的。19View如何进行刷新?答:在一个开启的线程中调用handler对象的sendMessage方法发送信息,在UI线程中调用handler对象的回调方法handleMessage进行处理,在回调方法中执行invalidate或者postInvalidate.20DIP、DPI分别是什么答:dip(device independent pixels)设备独立像素, 与设备屏幕有关。dpi:屏幕像素密度。android最早是没有考虑到这么多屏幕分辨率的。最早的机器是g1,他的分辨率是480*320。但是,由于android是开放的平台,各种各样分辨率的设备都可以运行。为了兼容这些平台,android从1.6开始,加入了设备独立像素,dip或者dp。标准屏幕480*320上,px与dip是1比1的。分辨率高的,比如800*480,就要按比例兑换成480*320。开发者在开发的时候,ui设计时最好用dp,系统会自动按比例计算为px,从而适配视图。dpi是屏幕像素密度。就是1英寸上像素点的个数。对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚。比如iphone4的视网膜级的屏幕肯定比iphone 3gs的屏幕像素密度高的多。 对于开发者来说,这个不是很重要。困难类题目21请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。答:拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()不断遍历Message Queue,Handler的创建依赖与当前线程中的Looper,如果当前线程没有Looper则必须调用Looper.prepare()。Handler , sendMessage到MessageQueue,Looper不断从MessageQueue中取出消息,回调handleMessage方法。22. 内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?答:内存溢出通俗理解就是软件(应用)运行需要的内存,超出了它可用的最大内存。内存泄漏就是我们对某一内存空间的使用,使用完成后没有释放。内存优化:Android中容易内存溢出的部分,就是图片的加载,我们可以使用图片的压缩加上使用LruCache缓存的目的来控制图片所能够使用的内存。还有对于比较耗资源的对象及时的关闭23AsyncTask使用在哪些场景?它的缺陷是什么?如何解决?答:AsyncTask 运用的场景就是我们需要进行一些耗时的操作,耗时操作完成后更新主线程,或者在操作过程中对主线程的UI进行更新。缺陷:AsyncTask中维护着一个长度为128的线程池,同时可以执行5个工作线程,还有一个缓冲队列,当线程池中已有128个线程,缓冲队列已满时,如果此时向线程提交任务,将会抛出RejectedExecutionException。解决:由一个控制线程来处理AsyncTask的调用判断线程池是否满了,如果满了则线程睡眠否则请求AsyncTask继续处理。24. android中的动画有哪几类,它们的特点和区别是什么? 答:两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。 25 Intent传递数据时,哪些数据类型可以被传递?答:SerializablecharsequenceParcelableBundle26. 简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver答:activity呈现了一个用户可以操作的可视化用户界面 service不包含可见的用户界面,而是在后台无限地运行 可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的接口与其进行通信 broadcast receiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面 intent:content provider在接收到ContentResolver的请求时被激活。 activity, service和broadcast receiver是被称为intents的异步消息激活的。 intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI ,Intent对象可以显式的指定一个目标component。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。 它是通过将Intent对象和目标的intent filter相比较来完成这一工作的。一个component的intent filter告诉android该component能处理的intent。intent filter也是在manifest文件中声明的。 27 Android引入广播机制的用意? 答:a:从MVC的角度考虑(应用程序内) b:程序间互通消息(例如在自己的应用程序内监听系统来电) c:效率上(参考UDP的广播协议在局域网的方便性) d:设计模式上(反转控制的一种应用,类似监听者模式)28. 请描述SAX、DOM、PULL解析xml的原理,以及各自优缺点。答:SAX是一个用于处理XML事件驱动的“推”模型,优点是一种解析速度快并且占用内存少的xml解析器,它需要哪些数据再加载和解析哪些内容。缺点是它不会记录标签的关系,而要让你的应用程序自己处理,这样就增加了你程序的负担。DOM是一种文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。Dom技术使得用户页面可以动态地变化,如 可以动态地显示或隐藏一个元素,改变它们的属性,增加一个元素等,Dom技术使得页面的交互性大大地增强。缺点是DOM解析XML文件时,会将XML文件 的所有内容以文档树方式存放在内存中。Pull解析和Sax解析很相似,Pull解析和Sax解析不一样的地方是pull读取xml文件后触发相应的事件调用方法返回的是数字还有pull可以在程序中控制想解析到哪里就可以停止解析29. 请解释什么是AIDL?答:AIDL:Android Interface Definition Language,即Android接口描述语言。 Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote

温馨提示

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

评论

0/150

提交评论