《Android面试题》word版Word文档下载推荐.docx
- 文档编号:7196041
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:15
- 大小:147.50KB
《Android面试题》word版Word文档下载推荐.docx
《《Android面试题》word版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《Android面试题》word版Word文档下载推荐.docx(15页珍藏版)》请在冰点文库上搜索。
基于事件驱动,在文档,元素开始结尾触发。
不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便
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如何解析?
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:
horizontal"
)
c.AbsoluteLayout(绝对布局):
用X,Y坐标来指定元素的位置,
d.RelativeLayout(相对布局):
可以理解为某一个元素为参照物,来定位的布局方式。
e.TableLayout(表格布局):
每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。
4、android中的动画有哪几类,它们的特点和区别是什么
一.补间动画(Tween):
使视图组件移动、放大、缩小以及产生透明度的变化;
二.逐帧动画(Frame):
传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
5、android中有哪几种解析xml的类?
官方推荐哪种?
以及它们的原理和区别。
有三种方式,SAX、DOM、PULL(推荐)
读取是单向的,优点:
不占内存空间、解析属性方便,缺点就是对于套嵌多个分支来说处理不是很方便。
会把整个XML文件加载到内存中去,
常常用在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"
时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次;
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
第一种:
在清单文件中声明,添加
<
receiveandroid:
name="
.IncomingSMSReceiver"
>
intent-filter>
<
actionandroid:
android.provider.Telephony.SMS_RECEIVED"
)
receiver>
第二种使用代码进行注册如:
IntentFilterfilter=newIntentFilter("
);
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