《Android面试题》word版.docx
- 文档编号:10674778
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:15
- 大小:147.50KB
《Android面试题》word版.docx
《《Android面试题》word版.docx》由会员分享,可在线阅读,更多相关《《Android面试题》word版.docx(15页珍藏版)》请在冰豆网上搜索。
《Android面试题》word版
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.xml
1、应用程序安装的时候,manifest信息会放到一张系统索引表里面
2、系统启动的时候,PackageManagerService读取Manifest信息
3、应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等
4、四大组件在需求的时候实例化操作
1、android系统的优势和不足
Android优点:
开源集成Google相关服务大多数厂商支持
Android缺点:
版本分化严重,品牌效应稀释
6.Java基础问题,用Java的集合类写下广度优先搜索.
使用队列实现。
7.Android都有哪些XML解析器,都熟练掌握吗?
SAXDOMPULL
SAX:
基于事件驱动,在文档,元素开始结尾触发。
不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便
DOM:
把整个XML文件加载到内存中去,解析速度快,占内存空间大。
PULL:
类似SAX方式,同样很节省内存
8.SQLite支持事务吗?
添加删除如何提高性能?
SQLite支持事务
a.优化SQL语句
b.使用ContentValue封装添加或者删除的数据。
9.AndroidService和Binder、AIDL你都熟练吗?
Android包含两种服务:
startServiceBoundService
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有什么区别?
1.GIT是分布式的,SVN不是;
2.GIT把内容按元数据方式存储,而SVN是按文件;
3.GIT分支和SVN的分支不同;
4.GIT没有一个全局的版本号,而SVN有;
5.GIT的内容完整性要优于SVN:
3、什么是Android?
基于Linux的开源的终端(手机,平板,TV)操作系统
4、说说Android有哪些特性?
a.开源,在一定的授权范围内可以随意修改,定制。
b.无缝集成Google众多的服务。
c.有大量免费应用供选择使用。
5、Android的系统架构的理解
6、执行eclipse的Run或者debug时候,发生了什么事情?
所有的操作都是有ADT控制
1、将项目所有的源代码编译成dex二进制文件
2、打包成APK
3、选择target设备,发布的地方(模拟器)
4、上传APK
5、安装APK
6、启动主activity
7、说说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,BroadcastReceiver
11、Manifest如何解析?
1、应用程序安装的时候,manifest信息会放到一张系统索引表里面
2、系统启动的时候,PackageManagerService读取Manifest信息
3、应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等
4、四大组件在需求的时候实例化操作
12、请说出Android进程5个等级
ForegroundProcess
VisableProcess
ServiceProcess
BackgroundProcess
EmptyProcess
优先级:
ForegroundProcess>VisableProcess>ServiceProcess>BackgroundProcess>EmptyProcess
13、什么是Activity?
Activity代表Android的屏幕,用来展示View组件。
类似于MVC中的控制器。
2、Android的四大组件是哪些,它们的作用?
Activity:
Android程序与用户交互的窗口,
service:
后台服务于Activity,后台运行无界面,处理长时间操作。
ContentProvider:
Android第三方应用数据之间数据共享。
BroadCastReceiver:
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/PackageName/Shared_Pref,
文件存储数据;外部和内部存储,PackageName/files,
SQLite数据库存储数据;/data/data/PackageName/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_TOP
8、请描述下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();//启动式Service
Intentintent=newIntent(this,Myservice.class);
startService(intent);//启动Service
Intentintent=newIntent();
stopService(Intentintent);//停止Service
b.bindService()//绑定式Service
bindService(Intentintent,serviceConnectionconn,intflag);//启动Service
unbindService(Intentintent);//停止Service
11、注册广播有几种方式,这些方式有何优缺点?
请谈谈Android引入广播机制的用意。
答:
首先写一个类要继承BroadcastReceiver
第一种:
在清单文件中声明,添加
name=".IncomingSMSReceiver"> name="android.provider.Telephony.SMS_RECEIVED") 第二种使用代码进行注册如: IntentFilterfilter=newIntentFilter("android.provider.Telephony.SMS_RECEIVED"); IncomingSMSReceiverreceiver=newIncomgSMSReceiver(); registerReceiver(receiver.filter); 两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。 12、请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。 (图形) 3.MessageQueue MessageQueue消息队列,用来存放通过Handler发布的消息,按照先进先出执行。 每个messagequeue都会有一个对应的Handler。 Handler会向messagequeue通过两种方法发送消息: sendMessage或post。 这两种消息都会插在messagequeue队尾并按先进先出执行。 但通过这两种方法发送的消息执行的方式略有不同: 通过sendMessage发送的是一个message对象,会被Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会自己执行。 4.Looper Looper是每条线程里的MessageQueue的管家。 Android没有Global的MessageQueue,而Android会自动替主线程(UI线程)建立MessageQueue,但在子线程里并没有建立MessageQueue。 所以调用Looper.getMainLooper()得到的主线程的Looper不为NULL,但调用Looper.myLooper()得到当前线程的Looper就有可能为NULL。 对于子线程使用Looper,APIDoc提供了正确的使用方法: 这个Message机制的大概流程: 1.在Looper.loop()方法运行开始后,循环地按照接收顺序取出MessageQueue里面的非NULL的Message。 2.一开始MessageQueue里面的Message都是NULL的。 当Handler.sendMessage(Message)到MessageQueue,该函数里面设置了那个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(updateUI)后,Looper则设置该Message为NULL,以便回收! 在网上有很多文章讲述主线程和其他子线程如何交互,传送信息,最终谁来执行处理信息之类的,个人理解是最简单的方法——判断Handler对象里面的Looper对象是属于哪条线程的,则由该线程来执行! 1.当Handler对象的构造函数的参数为空,则为当前所在线程的Looper; 2.Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对象。 13、简要解释一下activity、intent、intentfilter、service、Broadcase、BroadcaseReceiver 答: 一个activity呈现了一个用户可以操作的可视化用户界面;一个service不包含可见的用户界面,而是在后台运行,可以与一个activity绑定,通过绑定暴露出来接口并与其进行通信;一个broadcastreceiver是一个接收广播消息并做出回应的component,broadcastreceiver没有界面;一个intent是一个Intent对象,它保存了消息的内容。 对于activity和service来说,它指定了请求的操作名称和待操作数据的URI,Intent对象可以显式的指定一个目标component。 如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。 但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。 它是通过将Intent对象和目标的intentfilter相比较来完成这一工作的;一个component的intentfilter告诉android该component能处理的intent。 intentfilter也是在manifest文件中声明的。 14、AIDL的全称是什么? 如何工作? 能处理哪些类型的数据? AIDL(android接口定义语言)AndroidInterfaceDefineLanguage 在Android中,BoundService通过AIDL实现IPC机制,服务器端发布AIDL,实现服务,客户端获取Aidl,文件生成代理类,本地代码调用代理类实现应用之间通信,aidl可以处理基本类型,复杂类型,自定义对象等。 15、请解释下Android程序运行时权限与文件系统权限的区别。 答: 运行时权限Dalvik(android授权) 文件系统linux内核授权 1.应用程序(Application) Android本身提供了桌面(Home),联系人(Contact),电话(Phone)和浏览器(Browers)等核心应用,应用程序开发者可以利用应用程序框架层的API实现自己的程序。 2.应用程序框架(ApplicationFramework) 下面介绍一下每个应用程序可能会使用到的应用框架的部分: 一组Views(UI组件),这些UI组件包括列表(List),文本框(textbox),按钮(button)等,通过这些UI组件可以构建应用程序的视图部分; ContentProviders,其提供一种机制,通过这种机制,应用程序可以实现数据的互访和共享; ResourceManger,它负责管理非代码的访问,如图片资源,设计布局的XML文件及国际化的字符串等; NotificationManager,它能让程序将自己的警示信息显示在状态栏上,例如有短信的时候; ActivityManager,它管理应用程序的生命周期,并且提供了应用页面退出机制在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、BroadcastIntentReceiver、Service、ContentProvider。 并不是每一个程序都是由这四部分组成的,例如HelloWorld只涉及了Activity。 在Android中有一个叫做AndroidManifest.xml,在这个文件中需要申明用到的上面四类组件名称,以及可能为每一个组件的功能和需求进行必要的描述。 下面分别介绍一下这四个组件: 1、Activity 它是Android中最基本的模块之一,Activity一般代表手机屏幕的一屏。 Activity相当于一个UI的容器,在Activity中可以添加一些View,并对这些View做一些事件处理,例如加一些Button,Checkbox等,按一下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代码 Intentin=newIntent(A.this,B.class);//指定Intent要启动的类 startActivity(int);//启动一个新的Activity A.this.finish();//关闭当前的Ac
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android面试题 Android 试题 word
![提示](https://static.bdocx.com/images/bang_tan.gif)