Android考试题简答题总结文档格式.docx
《Android考试题简答题总结文档格式.docx》由会员分享,可在线阅读,更多相关《Android考试题简答题总结文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
11.ContentProvider:
进程在系统中将它们本身注册为某些数据类型的提供者。
请求该信息时,Android就会通过一个固定的API调用这些进程,以它们认为适合的方式查询或修改内容。
ContentProvider是一个类似Activity的高级对象,需要向系统声明
12.EventProvider类,扩展ContentProvider,在重载的方法中实现了对数据记录的查询、插入、删除、更新等操作。
通过EventProvider类,系统中创建了一个可以被其他程序使用的数据存储框架,其他开发人员编写的应用程序也可以使用这一框架对数据库进行访问
简答题:
1.谈谈android大众常用的五种布局。
(创建启动界面的常用布局)
答:
在Android中,共有五种布局方式,分别是:
FrameLayout(框架布局),LinearLayout
(线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。
(1)FrameLayout
框架布局,放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,下一个子元素会重叠覆盖上一个子元素,适合浏览单张图片。
(2)LinearLayout
线性布局,是应用程序中最常用的布局方式,主要提供控件水平或者垂直排列的模型,每个子组件都是以垂直或水平的方式来定位(默认是垂直)。
(3)AbsoluteLayout
绝对定位布局,采用坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下Y轴递增,组件定位属性为android:
layout_x
和
android:
layout_y来确定坐标。
(4)RelativeLayout
相对布局,根据另外一个组件或是顶层父组件来确定下一个组件的位置。
和CSS里面的类似。
(5)TableLayout
表格布局,类似Html里的Table.使用TableRow来布局,其中TableRow代表一行,TableRow的每一个视图组件代表一个单元格。
2.谈谈android数据存储方式。
Android提供了5种方式存储数据:
(1)使用SharedPreferences存储数据;
它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。
只能在同一个包内使用,不能在不同的包之间使用。
(2)文件存储数据;
文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。
(3)SQLite数据库存储数据;
SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。
(4)使用ContentProvider存储数据;
主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content
Provider的各种数据类型。
(5)网络存储数据;
通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。
3.Android中Activity,
Intent,
Content
Provider,
Service各有什么区别。
Activity:
活动,是最基本的android应用程序组件。
一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来。
Intent:
意图,描述应用想干什么。
最重要的部分是动作和动作对应的数据。
Provider:
内容提供器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。
当你想将你的应用数据和其他应用共享时,内容提供器就可以发挥作用了。
Service:
服务,具有一段较长生命周期且没有用户界面的程序。
4.View,
surfaceView,
GLSurfaceView有什么区别。
view是最基础的,必须在UI主线程内更新画面,速度较慢。
SurfaceView
是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。
GLSurfaceView
是SurfaceView的子类,opengl
专用的。
5.Adapter有什么作用?
常见的Adapter有哪些?
Adapter是连接后端数据和前端显示的适配器接口。
常见的Adapter有ArrayAdapter,
BaseAdapter,
CursorAdapter,
HeaderViewListAdapter,
ListAdapter,
ResourceCursorAdapter,
SimpleAdapter,
SimpleCursorAdapter,
SpinnerAdapter,
WrapperListAdapter等。
6.Manifest.xml文件中主要包括哪些信息?
manifest:
根节点,描述了package中所有的内容。
uses-permission:
请求你的package正常运作所需赋予的安全许可。
permission:
声明了安全许可来限制哪些程序能你package中的组件和功能。
instrumentation:
声明了用来测试此package或其他package指令组件的代码。
application:
包含package中application级别组件声明的根节点。
activity:
Activity是用来与用户交互的主要工具。
receiver:
IntentReceiver能使的application获得数据的改变或者发生的操作,即使它当前不在运行。
service:
Service是能在后台运行任意时间的组件。
provider:
ContentProvider是用来管理持久化数据并发布给其他应用程序使用的组件。
7.根据自己的理解描述下Android数字签名。
(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序。
(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证。
(3)如果要正式发布一个Android
,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布。
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。
如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
8.请谈一下Android系统的架构。
Android系统采用了分层架构,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
9.请描述下Activity的生命周期。
必调用的三个方法:
onCreate()–>
onStart()–>
onResume(),用AAA表示
(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下
AAA–>
onFreeze()–>
onPause()–>
onStop()–>
onRestart()–>
onStart(),onResume()…
(2)用户点击Home,Actvity调用顺序如下
onStop()—Maybe–>
onDestroy()–Maybe
(3)调用finish(),Activity调用顺序如下
onDestroy()
(4)在Activity上显示dialog,Activity调用顺序如下
AAA
(5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下
onPause()
(6)设备进入睡眠状态,Activity调用顺序如下
onPause()
10.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
onSaveInstanceState()当你的程序中某一个ActivityA在运行时,主动或被动地运行另一个新的ActivityB,这个时候A会执行onSaveInstanceState()。
B完成以后又会来找A,这个时候就有两种情况:
一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;
而没被收回的就直接执行onResume(),跳过onCreate()了。
11.如何将一个Activity设置成窗口的样式。
在AndroidManifest.xml中定义Activity的地方一句话android:
theme="
@android:
style/Theme.Dialog"
或android:
style/Theme.Translucent"
就变成半透明的
12.如何退出Activity?
如何安全退出已调用多个Activity的Application?
对于单一Activity的应用来说,退出很简单,直接finish()即可。
当然,也可以用killProcess()和System.exit()这样的方法。
但是,对于多Activity的应用来说,在打开多个Activity后,如果想在最后打开的Activity直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个Activity而已。
没有办法直接结束一个应用,而只能用自己的办法间接办到。
现提供几个方法,供参考:
1、抛异常强制退出:
该方法通过抛异常,使程序ForceClose。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。
2、记录打开的Activity:
每打开一个Activity,就记录下来。
在需要退出时,关闭每一个Activity即可。
3、发送特定广播:
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
4、递归退出:
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
除了第一个,都是想办法把每一个Activity都结束掉,间接达到目的。
但是这样做同样不完美。
你会发现,如果自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。
但至少,我们的目的达到了,而且没有影响用户使用。
为了编程方便,最好定义一个Activity基类,处理这些共通问题。
13.请介绍下ContentProvider是如何实现数据共享的。
创建一个属于你自己的Contentprovider或者将你的数据添加到一个已经存在的Contentprovider中,前提是有相同数据类型并且有写入Contentprovider的权限。
14.View重绘和内存泄露的好像是面试经常问的问题
1.View的刷新:
在需要刷新的地方使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate.View可以调用invalidate()和postInvalidate()这两个方法刷新View受系统刷新(系统内部有个循环,监控事件、做业务处理、绘UI),可以用postInvalidate()促使系统刷新。
2.GC内存泄露出现情况:
1.数据库的cursor没有关闭2.构造adapter时,没有使用缓存contentview衍生listview的优化问题—–减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/3.Bitmap对象不使用时采用recycle()释放内存4.activity中的对象的生命周期大于activity调试方法:
DDMS==>
HEAPSZIE==>
dataobject==>
[TotalSize]
15.DDMS与TraceView的区别?
DDMS是一个程序执行查看器,在里面你可以看见线程和堆栈等信息,TraceView是程序性能分析器
16.
如何将打开resaw目录中的数据库文件?
在Android中不能直接打开resaw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。
复制的基本方法是使用getResources().openRawResource方法获得resaw目录中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。
在AndroidSDK中可以使用SQLiteDatabase.openOrCreateDatabase方法来打开任意目录中的SQLite数据库文件。
17.
Androiddvm的进程和Linux的进程,应用程序的进程是否为同一个概念
DVM指dalivk的虚拟机。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念。
18.
sim卡的EF文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的
19.
什么是嵌入式实时操作系统,Android操作系统属于实时操作系统吗?
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。
主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。
又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。
20.
一条最长的短信息约占多少byte?
中文70(包括标点),英文160,160个字节。
21.android中的动画有哪几类,它们的特点和区别是什么?
两种,一种是Tween动画、还有一种是Frame动画。
Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;
另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
22.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。
23.说说mvc模式的原理,它在android中的运用
android的官方建议应用程序的开发采用mvc模式。
何谓mvc?
mvc是model,view,controller的缩写,mvc包含三个部分:
l模型(model)对象:
是应用程序的主体部分,所有的业务逻辑都应该写在该层。
l视图(view)对象:
是应用程序中负责生成用户界面的部分。
也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
l控制器(control)对象:
是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给mvc处理。
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里面处理,当然对业务计算等操作也是必须放在的该层的。
24.如何启用Service,如何停用Service。
1.第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service2.第二种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还可以通过ServiceConnection访问Service。
在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。
25.请解释下Android程序运行时权限与文件系统权限的区别。
apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置。
android系统有的权限是基于签名的。
26、简要解释一下activity、intent、intentfilter、service、Broadcase、BroadcaseReceiver
一个activity呈现了一个用户可以操作的可视化用户界面一个service不包含可见的用户界面,而是在后台无限地运行可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信一个broadcastreceiver是一个接收广播消息并作出回应的component,broadcastreceiver没有界面intent:
contentprovider在接收到ContentResolver的请求时被激活。
activity,service和broadcastreceiver是被称为intents的异步消息激活的。
一个intent是一个Intent对象,它保存了消息的内容。
对于activity和service来说,它指定了请求的操作名称和待操作数据的URIIntent对象可以显式的指定一个目标component。
如果这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。
但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。
它是通过将Intent对象和目标的intentfilter相比较来完成这一工作的。
一个component的intentfilter告诉android该component能处理的intent。
intentfilter也是在manifest文件中声明的。
27、横竖屏切换时候activity的生命周期?
1、不设置Activity的android:
configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次2、设置Activity的android:
configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次3、设置Activity的android:
configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
28.如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?
可以将dictionary.db文件复制到EclipseAndroid工程中的resaw目录中。
所有在resaw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。
可以将dictionary.db文件复制到resaw目录中
29、android的优势与不足
Android平台手机5大优势:
一、开放性二、挣脱运营商的束缚三、丰富的硬件选择四、不受任何限制的开发商五、无缝结合的Google应用
Android的5大不足:
一、安全和隐私二、首先开卖Android手机的不是最大运营商
三、运营商仍然能够影响到Android手机四、同类机型用户减少五、过分依赖开发商缺少标准配置
30.Android引入广播机制的用意?
a:
从MVC的角度考虑(应用程序内)其实回答这个问题的时候还可以这样问,android为什么要有那4大组件,现在的移动开发模型基本上也是照搬的web那一套MVC架构,只不过是改了点嫁妆而已。
android的四大组件本质上就是为了实现移动或者说嵌入式设