《Android面试题》word版.doc_第1页
《Android面试题》word版.doc_第2页
《Android面试题》word版.doc_第3页
《Android面试题》word版.doc_第4页
《Android面试题》word版.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗?FLAG_ACTIVITY_NEW_TASK 如果设置,Activity会在一个新Task的运行。FLAG_ACTIVITY_CLEAR_TOP 如果设置,将Activity上方的所有Activity都将关闭FLAG_ACTIVITY_SINGLE_TOP 如果设置,当这个Activity位于task顶端运行时,不再启动一个新的 2. Activity和Task的启动模式有哪些? 每种含义是什么?;“standard” (默认) 对于每一个启动Intent都会生成一个activity的新实例; “singleTop” activity如果在task的栈顶,则不生成新的该activity的实例“singleTask” activity如果在task的中,则不生成新的该activity的实例“singleInstance” activity独占一个task,其它activity不能存在那个task里3. 通过Intent传递一些二进制数据的方法有哪些?传递实现Serializable接口对象传递实现Parcelable接口对象4. 能说下Android应用的入口点吗?AndroidManifest.xml1、应用程序安装的时候,manifest信息会放到一张系统索引表里面2、系统启动的时候,PackageManagerService读取Manifest信息3、应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等4、四大组件在需求的时候实例化操作1、 android系统的优势和不足Android优点:开源 集成Google相关服务 大多数厂商支持Android缺点:版本分化严重,品牌效应稀释6. Java基础问题,用Java的集合类写下广度优先搜索.使用队列实现。7. Android都有哪些XML解析器,都熟练掌握吗?SAX DOM PULLSAX:基于事件驱动,在文档,元素开始结尾触发。不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便DOM:把整个XML文件加载到内存中去,解析速度快,占内存空间大。PULL:类似SAX方式,同样很节省内存8. SQLite支持事务吗? 添加删除如何提高性能?SQLite支持事务a.优化SQL语句b.使用ContentValue封装添加或者删除的数据。9. Android Service和Binder、AIDL你都熟练吗?Android包含两种服务:startService BoundService Binder、AIDL是实现BoundService的两种方式。a. 扩展Binder类,主要用于应用中Activity和Service的交互,通信。b. 使用AIDL主要为了实现IPC,实现应用之间交互,调用。10. 你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点?三星i9100或者其它iPhone外观塑料,握持感较差金属,握持感好UI比较粗糙美观流畅度较差很好电量看视频,通话消耗快看视频,通话消耗比较慢发热大型游戏发热较大大型游戏发热较小1、Android中为什么要经常使用内部类?内部类特征:1内部类与父类同生共死;2内部成员变量之间,可以互相访问;3内部成员变量可以访问到父类的一些类型;4父类可以操作内部的一些东西在Android中经常在设置事件和多线程的时候使用匿名内部类。2、版本控制中,SVN与GIT有什么区别?1GIT是分布式的,SVN不是;2GIT把内容按元数据方式存储,而SVN是按文件;3GIT分支和SVN的分支不同;4GIT没有一个全局的版本号,而SVN有;5GIT的内容完整性要优于SVN:3、什么是Android?基于Linux的开源的终端(手机,平板,TV)操作系统4、说说Android有哪些特性?a.开源,在一定的授权范围内可以随意修改,定制。b.无缝集成Google众多的服务。c.有大量免费应用供选择使用。5 、Android的系统架构的理解6、执行eclipse的Run或者debug时候,发生了什么事情?所有的操作都是有ADT控制1、 将项目所有的源代码编译成dex二进制文件2、 打包成APK3、 选择target设备,发布的地方(模拟器)4、 上传APK5、 安装APK6、 启动主activity7、说说Activity,view ,window之间的关系Activity在构造的时候new了一个Window与当前的上下文绑定,window是抽象类,通过phoneWindow来绑定自己定义的View,通过setContentView展示出来8、掌上设备开发的局限性会制约我们的需求通常有哪些?1、 更低的处理器2、 有限的内存3、 有限的存储能力4、 小屏幕和低分辨率(HVGA、QVGA、WVGA)5、 数据传输的高成本6、 数据传输的低速度和高延迟7、 不稳定的数据连接8、 有限的电量9、做手机开发经常需要思考哪些问题?1、 性能(更快和更灵敏)2、 响应能力(避免ANR)3、 无缝:用户使用自然(与第三方程序的交互,前台后台的切换)4、 安全:对操作权限的考虑 10、什么构成了android应用程序?Activity ,Service ,ContentProvider,BroadcastReceiver11、Manifest如何解析?1、应用程序安装的时候,manifest信息会放到一张系统索引表里面2、系统启动的时候,PackageManagerService读取Manifest信息3、应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等4、四大组件在需求的时候实例化操作12、请说出Android进程5个等级Foreground ProcessVisable ProcessService ProcessBackground ProcessEmpty Process 优先级:Foreground Process Visable Process Service Process Background Process Empty Process13、什么是Activity?Activity代表Android的屏幕,用来展示View组件。类似于MVC中的控制器。2、 Android的四大组件是哪些,它们的作用?Activity: Android程序与用户交互的窗口, service:后台服务于Activity,后台运行无界面,处理长时间操作。 Content Provider:Android第三方应用数据之间数据共享。BroadCast Receiver: Android的事件广播模型3、 请介绍下Android中常用的五种布局。a.FrameLayout(框架布局):所有控件依次放在左上角,会重叠,b.LinearLayout(线性布局):线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation=vertical)和水平布局 (android:orientation=horizontal )c.AbsoluteLayout(绝对布局):用X,Y坐标来指定元素的位置,d.RelativeLayout(相对布局):可以理解为某一个元素为参照物,来定位的布局方式。e.TableLayout(表格布局):每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。4、 android中的动画有哪几类,它们的特点和区别是什么 一补间动画(Tween):使视图组件移动、放大、缩小以及产生透明度的变化;二逐帧动画(Frame):传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。5、 android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。有三种方式,SAX、DOM、PULL(推荐)SAX:读取是单向的,优点:不占内存空间、解析属性方便,缺点就是对于套嵌多个分支来说处理不是很方便。DOM:会把整个XML文件加载到内存中去,PULL:常常用在J2ME对于节点处理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。6、 ListView的优化方案(用代码较好)自定义适配器,在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。给contentView设置tag(setTag():,传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。分页加载:如果listview需要显示的item很多,就要考虑分页加载。6.请介绍下Android的数据存储方式。SharedPreferences存储数据;用来存储一些简单配置信息的一种机制,只能在同一个包内使用,目录是/data/data/Package Name/Shared_Pref,文件存储数据;外部和内部存储,Package Name/files,SQLite数据库存储数据;/data/data/Package Name/database 。ContentProvider存储数据;当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。网络存储数据:网络存储方式,需要与Android 网络数据包打交道aivity的启动模式有哪些?是什么含义?“standard” (默认) “singleTop” “singleTask” “singleInstance”7、 跟activity和Task 有关的 Intent启动方式有哪些?其含义?FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_RESET_TASK_IF_NEEDED FLAG_ACTIVITY_SINGLE_TOP8、 请描述下Activity的生命周期。答:activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();可见生命周期:从onStart()直到系统调用onStop()前台生命周期:从onResume()直到系统调用onPause()9、 activity在屏幕旋转时的生命周期答:不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;设置Activity的android:configChanges=orientation时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;设置Activity的android:configChanges=orientation|keyboardHidden时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法10、 如何启用Service,如何停用Service。a.StartService();/启动式ServiceIntent intent = new Intent(this, Myservice.class);startService(intent); /启动Service Intent intent = new Intent();stopService(Intent intent);/停止Service b.bindService()/绑定式ServicebindService(Intent intent,serviceConnection conn,int flag); /启动ServiceunbindService(Intent intent); /停止Service11、 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。答:首先写一个类要继承BroadcastReceiver第一种:在清单文件中声明,添加 action android:name=vider.Telephony.SMS_RECEIVED)第二种使用代码进行注册如:IntentFilter filter = new IntentFilter(vider.Telephony.SMS_RECEIVED);IncomingSMSReceiver receiver = new IncomgSMSReceiver();registerReceiver(receiver.filter);两种注册类型的区别是:1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。12、 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。(图形)3. Message Queue Message Queue消息队列,用来存放通过Handler发布的消息,按照先进先出执行。 每个message queue都会有一个对应的Handler。Handler会向message queue通过两种方法发送消息:sendMessage或post。这两种消息都会插在message queue队尾并按先进先出执行。但通过这两种方法发送的消息执行的方式略有不同:通过sendMessage发送的是一个message对象,会被 Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会自己执行。4. Looper Looper是每条线程里的Message Queue的管家。Android没有Global的Message Queue,而Android会自动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。所以调用Looper.getMainLooper()得到的主线程的Looper不为NULL,但调用Looper.myLooper() 得到当前线程的Looper就有可能为NULL。对于子线程使用Looper,API Doc提供了正确的使用方法:这个Message机制的大概流程: 1. 在Looper.loop()方法运行开始后,循环地按照接收顺序取出Message Queue里面的非NULL的Message。 2. 一开始Message Queue里面的Message都是NULL的。当Handler.sendMessage(Message)到Message Queue,该函数里面设置了那个Message对象的target属性是当前的Handler对象。随后Looper取出了那个Message,则调用 该Message的target指向的Hander的dispatchMessage函数对Message进行处理。在dispatchMessage方法里,如何处理Message则由用户指定,三个判断,优先级从高到低: 1) Message里面的Callback,一个实现了Runnable接口的对象,其中run函数做处理工作; 2) Handler里面的mCallback指向的一个实现了Callback接口的对象,由其handleMessage进行处理; 3) 处理消息Handler对象对应的类继承并实现了其中handleMessage函数,通过这个实现的handleMessage函数处理消息。 由此可见,我们实现的handleMessage方法是优先级最低的! 3. Handler处理完该Message (update UI) 后,Looper则设置该Message为NULL,以便回收! 在网上有很多文章讲述主线程和其他子线程如何交互,传送信息,最终谁来执行处理信息之类的,个人理解是最简单的方法判断Handler对象里面的Looper对象是属于哪条线程的,则由该线程来执行! 1. 当Handler对象的构造函数的参数为空,则为当前所在线程的Looper; 2. Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对象。13、 简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver答:一个activity呈现了一个用户可以操作的可视化用户界面;一个service不包含可见的用户界面,而是在后台运行,可以与一个activity绑定,通过绑定暴露出来接口并与其进行通信;一个broadcast receiver是一个接收广播消息并做出回应的component,broadcast receiver没有界面;一个intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI,Intent对象可以显式的指定一个目标component。如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。它是通过将Intent对象和目标的intent filter相比较来完成这一工作的;一个component的intent filter告诉android该component能处理的ent filter也是在manifest文件中声明的。14、 AIDL的全称是什么?如何工作?能处理哪些类型的数据?AIDL(android 接口定义语言)Android Interface Define Language在Android中,BoundService通过AIDL实现IPC机制,服务器端发布AIDL,实现服务,客户端获取Aidl,文件生成代理类,本地代码调用代理类实现应用之间通信,aidl可以处理基本类型,复杂类型,自定义对象等。15、 请解释下Android程序运行时权限与文件系统权限的区别。答:运行时权限Dalvik( android授权) 文件系统 linux 内核授权1.应用程序(Application) Android本身提供了桌面(Home),联系人(Contact),电话(Phone)和浏览器(Browers)等核心应用,应用程序开发者可以利用应用程序框架层的API实现自己的程序。 2.应用程序框架(Application Framework) 下面介绍一下每个应用程序可能会使用到的应用框架的部分: 一组Views(UI组件),这些UI组件包括列表(List),文本框(textbox),按钮(button)等,通过这些UI组件可以构建应用程序的视图部分;Content Providers,其提供一种机制,通过这种机制,应用程序可以实现数据的互访和共享;Resource Manger,它负责管理非代码的访问,如图片资源,设计布局的XML文件及国际化的字符串等;Notification Manager,它能让程序将自己的警示信息显示在状态栏上,例如有短信的时候;Activity Manager,它管理应用程序的生命周期,并且提供了应用页面退出机制在Android应用中每一个应用一般是由多个页面组成的,每一个页面的单位都是Activity,也就是说Android的应用程序是由多个Activity的交互构成的;3.库(Libraries)和运行环境(RunTime) 这部分开始涉及底层,与应用程序的关系不是很密切。 Android中包含一些C/C+库,这些库可以被Android系统中不同的组件使用,通过Android应用程序框架为开发者提供服务,一下是一些核心库: 系统C库、媒体库、LibWebCore等。 Android包括了一个核心库,该库提供了java编程语言核心库的大多数功能。 4.操作系统(os) 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik依赖于Linux内核的一些功能,例如,线程机制和底层内存管理机制。 其次是Android应用程序组成 一个Android程序有四个部分组成:Activity、Broadcast Intent Receiver、Service、Content Provider。并不是每一个程序都是由这四部分组成的,例如HelloWorld只涉及了Activity。在Android中有一个叫做AndroidManifest.xml,在这个文件中需要申明用到的上面四类组件名称,以及可能为每一个组件的功能和需求进行必要的描述。下面分别介绍一下这四个组件: 1、Activity 它是Android中最基本的模块之一,Activity一般代表手机屏幕的一屏。Activity相当于一个UI的容器,在Activity中可以添加一些View,并对这些View做一些事件处理,例如加一些Button,Check box等,按一下button可以实现Activity之间的跳转,和网页跳转不同的是Activity之间的跳转可能会有返回值。Android会把每一个应用程序的Activity都保存在堆栈中。 Intent就是一次对将要执行的操作的抽象描述,Intent最常用的作用是通过Intent可以实现多个Activity之间的跳转,Intent中重要的部分是Intent动作(Action)和动作对应的数据(Data),典型的动作有:MAIN(Activity的门户)、VIEW、PICK、EDIT等而动作对应的数据则以URI的形式进行标示,例如查看一个人的联系方式,需要创建一个VIEW动作的Intent,以及这个人的URI,下面代码是实现两个Activity之间的跳转(A跳转到B): Java代码 Intent in = new Intent(A.this,B.class);/指定Intent要启动的类 startActivity(int);/启动一个新的Activity A.

温馨提示

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

评论

0/150

提交评论