您好,欢迎来到欧得旅游网。
搜索
您的当前位置:首页Android技术面试整理附有详细答案包括百度新浪中科软等多家公司笔试面试题

Android技术面试整理附有详细答案包括百度新浪中科软等多家公司笔试面试题

来源:欧得旅游网

19题为常考题目!!(版本号:2

1Andrid的四大件是哪些,它的作用?......................

2
3
4

Adrod 中常用的五种布局。..........................3 android 中的画有哪几,的特点和区是什么..3 android 中有哪几种解析xml的?官方推荐哪种?以

及它的原理和区..............................................................3

5Listiew化方案...........................................................4

6

Android 的数据存方式。..............................4

7activity 的启动模式有哪些?是什么含义?6
8 跟activity Tsk 有关的Intnt 启动方式有哪些?其
910ativity 在屏幕旋转时的生命周期................................0

11如何启用Service,如何停用Servce10

12、注册广播有几种方式,些方式有何缺点?请谈谈

Android引入广播机制的用意。.............................................11

13下在单线程模型中MessageHandler、Message

Queue、Loopr的关系。....................................................

11

14简要解释一下acivity、intent intenfiterservice BroadcseBroadcaseReceivr13


15

说说mc 模式的原理,它在android 中的运用,adro

d的官方建议应用程序的开采用mvc模式。何mv?116什么是ANR如何避免它?3
7什么情况会FrceCloe?如何避免?能否捕获导致其的异常?14
8、描述一下android的系架构....................................419、ContentProier是如何实现数据共享的。1420、Anrid本身的api并未声明会抛出异常,其在运行有无可能抛出runtme异常,你遇到过吗?有的

什么问题?如何解决?.............................................................15
21ntntSevce 有何优点?...............................................5
5

23、如何将一个Aciviy设置成窗口的样式。...................1524如何退出Activt?如何安全退出已调用多个AciiyApplicatio?.............................................................................155AIDL的全称是什么?如何工作?能处理哪些类型的数据?16
26、请解释下Android程序运行时权限与文件系统权限的区别。........................................................................................7 27、系统上安装了多种浏览器,能否指定某浏览器访问指

面?请说明原由。17
28、ndrid优势和不足..........................................1729Androiddvm程和Linux,用程序的程是否同一个概念18
30im卡的EF文件是什么?有何作用18
31、嵌入式操作系内存管理有哪几种,各有何特性1832什么是嵌入式实时操作系,Android操作系属于实时操作系统吗?........................................................................1833一条最的短信息占多少byte?8

4有一个一维整型数组in[]data 保存的是一张宽为widh,高为heiht 的图片像素值信息。请写一个算法,将该图片
ﻩﻩ135 如何将SLie 数据库(ictionary.b 文件)与apk 文件

一起1
36如何将打开resaw中的数据文件?19
37、DDMSTraceView的区?....................................138jva中如何引用本地..............................................139谈谈AndroidIPC通信)机制19
40、DK是什么....................................................................19



1Android的四大件是哪些,的作用?

:Actiity:AtivityAndroid程序与用交互的窗口,是Android构造中最基本的一种,它需要保持各界面的状,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
servce:后台服Activity,封装有一个完整的功能逻辑实现,接受上指令,完成相关的事物,好需要接受的Intent提供同步和异步的接口
onentPrvider:是Andoid提供的第三方用数据的访

问方案,可以派生Content Provider类,对外提供数据,可以
像数据库一样进行选择排序,屏蔽内部数据的存储细节,
BroadCast Recever:接受一种或者多种Intnt 作触发事

,接受相关消息,做一些简单处,转换成一条Noifica ion,一了Adroid的事件广播模型
2下Android中常用的五种布局。

常用五种布局方式,分:rmeLayut(框架布局)LnearLayout(线性布局),AbsolteLayou(绝对布局),ReatveLyout(相布局)Tbleayout(表格布局)。

一、FramLayu:所有东西依次都放在左上角,会重叠,这个 布局比较简单,也只能放一点比较简单的东西。二、Lier

ayout:线性布局,每一个LineaLayout里面又可分垂直布局(andoi:orientation=vertial")和水平布局(adoidorientatio="horzontal")。当垂直布局,每一行就只有一个元素,多个元素依次垂直往下;水平布局,只有一行,每一个元素依次向右排列。三、AbslutLyout:绝对布局用X,Y来指定元素的位置,种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的,算比。四、RelaiveLayut:相布局可以理解某一个元素参照物,来定位的布局方式。主要属性有:于某一个元素adrod:l

yout_below、 androi:layu_toLfOf 相对于父元
素的地方androi:lyout_aligParentLeft、android:layut_li
每一个元素。每一个布局都有自己适合的方式,这五个布局

元素可以相互嵌套,做出美的界面。

3andoid中的画有哪几,的特点和区是什么答:两种,一种是Tween画、有一种是Frae画。Tween,实现方式可以使视图组件移、放大、小以及生透明度的;另一种Fame画,传统画方法,过顺序的播放排列好的片来实现影。

4 adrod 中有哪几种解析xml 的类?官方推荐哪种?以

及它们的原理和区别。



答:XML解析主要有三种方式,SXDOM、PULL。常P

上开使用Dom对轻松些,但一些性能敏感的数据或手机上是主要采用SAX方式,SX取是向的,:不占内存空、解析属性方便,但缺点就是于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加到内存中去,方法在找方面可以和Xah很好的合如果数据量不是很大推荐使用,而PUL常常用在J2ME理比,SAX方式,省内存,J2ME中我们经常使用的KXML来解析。

5 LstView 的优化方案
答:1、如果自定义适配器,那么在geVew 方法中要考虑方法

尽可能少创建view

2、cotnVietag(seTg()),入一个viewHoler象,用于存要示的数据,可以达到像数据异步加

效果。

3、如果litview需要示的item很多,就要考。比如一共要100条或者更多的候,我可以考先加20条,等用拉到列表底部的候再去加接下来的20

条。

Android的数据存方式。


6



答:使用ShaedPefeences数据;文件存数据;SQie数据数据;使用ContenPoider数据;

据;
PreferenceFile,aaBae三种方式分别对应的目是/daa/dat/PackgeName/Shared_Pref,/ata/daa/PacageNae/file,/dtadata/PackgName/daabase

:使用SharedPrefernes数据
首先ShaedPrferences方式,它是Anroid提供的用来存一些简单配置信息的一种机制,例如:的用

户名与密码。其采用了Map 数据结构来存储数据,以键值的
方式存储,可以简单的读取与写入,具体实例如下:
ShardPreferenes user =getSharedPrefeece(“user_

ino”,0;
strNme=ser.geSrin(“AM””);
strasswordusergetSrig(“PASWORD”,””);

voidWrieSharedPreeenes(tringstram,StringstrPassod){
haredPreferneuer =getSharedrefrencs(“use_ nfo”,0);

e.edi();
userputSting(“AE”strName);
ue.puString(“PASSOR,strPassword);
ue.commit()

数据取与写入的方法都非常简单,只是在写入的候有些区:先用edit()使其编辑,然后才能修改数据,最后使用comit()提交修改的数据。实际ShredPrefernes是采用了XML格式将数据存设备中,在DDS中的中

/daa/data/package nam>/shares_prefs 下。使用Sh
redPefeences 是有些限制的:只能在同一个包内使用,不能在
文件存储方式是一种较常用的方法,在Adroid 中读取/写入

文件的方法,与Java中实现I/O的程序是完全一样的,提供了open)和ope()方法来读取设备上的文件。具体实例如下:Strig fn= “moandoid.log”;
fis openfn)
fs= open(f,Cntex.MODE_PRVATE)
:网络存储数据
网络存储方式,需要与Android网络数据包打交道,关于 Android网络数据包的详细说明,请阅读AnrodSDK 引用

JavaSK的哪些package?

:Conentroie
1、CntentProider
承CotentProider,并重写该类用于提供数据和存数据的方法,就可以向其他用共享其数据。然使用其他方法也可以外共享数据,但数据访问方式会因数据存的方式而不同,如:采用文件方式外共享数据,需要 ;采用shaedprfrenes共享数据,需要使文件操作写数据
用shaedrefreneAPI写数据。而使用ConentPrvder

共享数据的好处是统一了数据访问方式。
2、Uri类简介
进行操作,一个Uri 由以下几部分组成:

1.scheme:ContentPrvider(内容提供者)的scemeAndrid:cotent://…
2.主机名(Autority):用于唯一标识这ContetProvider,外部用者可以根据标识来找到它。

3.路径(path:可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
要操作cntact表中id为10的记录,可以构建这样的路 :/contat/10

要操作contat表中i10的记录nme字段,cotact/10/ame
要操作cotct表中的所有记录,可以构建这样的路径:/contat?

要操作的数据不一定来自数据,也可以是文件等他存方式,如下:
要操作xml文件中contac点下的name,可以构建这样的路径:/contact/nae
如果要把一个字符串转换Ui,可以使用Uri中的prse()

方法,如下:
Ururi = r.parse("content://cmchangceg.rovie
因为Ui 代表了要操作的数据,所以我们很经常需要解析Ui,

并从Uri取数据。Anrod提供了两个用于操作Uri的工具,别为riMatcer和ContentUrs。掌握它的使用,会便于我的开工作。

Uriatcher:用于匹配Uri,它的用法如下:

.首先把你需要匹配Uri路径全部给注册上,如下:
/常量UriMatcherNO_MTCH表示不匹配任何路径的 返回码(-)


UriMatcheruriatchernewriMtch
r(UriMatcher.NO_MATCH);
/如果math()方法匹配content://om.changchen.sqlite.provide.cotactproide/contct路径,返回匹配码为1riatcher.adUI(“omchancheg.sqlite.providr.cotatprvider”,“cotact”,1;/添加需要匹配ui,如果匹配就会返回匹配

//如果match()方法匹配content:/cm.chngcheng.qlieprovidrcontactprovider/conac/230路径,返回匹配

2
riatcher.addURI(“com.changchengsqliteproier.cn
ur)方法对输入的Ui 进行匹配,如果匹配就返回匹配码,匹

addUR()方法入的第三个参数,匹配contnt://com.changheng.sqlite.rovider.ontactrovidrcontact路径,返回的匹配码为1。

ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
withAppenddId(uri,id)用于为路径加上ID部分
prseId(ui)方法用于从路径中获取ID部分
ContentResolver:当外部应用需要对ContentProvidr中的数

行添加、除、修改和查询操作,可以使用CntetResolver来完成,要ContetResover,可以使用Activity提供的gtonentReslver()方法。ContetReover使用insertdeete、update、query方法,来操作数据。

7 actiity的启模式有哪些?是什么含?

:android里,有4actiity的启动模式,分别为:
standard”(默认)
“sngleTop”
“singleTask”
“singlInstance”

“sandad”和”singleTop”activty的目标task,和收到的I
tent的发送者在同一个tak内,除非inent包括参数FLA_
TIVITY_NE_TASK

如果提供了FAG_CTIVITY_NEW_AK参数,会启task里。

sngeTsk”ingentace”是把activity一个task的根元素,不会被启到一个其他task里。

2.是否允许多个实例
“sandrd”和”singleTop”可以被实例化多次,并且存在于不

同的task中,且一个task可以包括一个activity的多个例;singeak”singleInstace”限制只生成一个,并且是task的根元素。singlTop要求如果intnt栈顶有要建的Activity例,inent给该实例,而不新的例。

3.是否允其它activiy存在于本tak
ingleInsance”独占一个tsk,其它actvity不能存在那个task ;如果它启了一个新的activity,不管新的actvty的launch
mode如何,新的activiy都将会到task里运行(如同加了

FLA_ACTIVITY_NE_ASK 参数)。
而另外三种模式,则可以和其它activity 共存。
实例;

singleTop”activiy如果在tsk栈顶不生成新的activiy例,直接使用栈顶例,否,生成actiity例。

比如在tas元素A-B-C-D(D栈顶),这时D一个启itent,如果D是sandard”的,生成D的一个新例,栈变为-B-C-DD

如果D sigeTp的话,则不会生产D的新实例,栈状态 仍为A--CD


如果这时Intent的,不管B 的launcmode stadar

d”sngeTop”,都会生成B的新,态变为A-B-C-D-B。

sigleInsance”是其所在的唯一aciiy,它会每次都被重

用。

ingleTask”如果在栈顶接受intent,,ntent会被弃,但是tsk仍会回到前台。

当已存在的actvity理新的intn,oNewItent()方法如果收到intent生成一个atiity例,

那么用户可以通过back键回到上一个状态;如果是已经存在的一个atiiy 来处理这个intent的话,用户不能通过按back
8、其含义?

核心的ItentFlag 有:
FLAG_ACIITY_EW_TASK
FLA_ATIVITY_LAR_TP
FLA_ACIVITY_RESET_TASK_IF_NEEDED
FLA_ATIVIY_SINGLE_OP
LAG_CTIVITY_NE_TASK
如果设置,这个Activity会成为历史stack中一个新Ts 的开始。一个Task(从启动它的Activity到下一个Task 中的

Ativity)了用可以迁移的Activty原子Task可以移到前台和后台;在某个特定Tak中的所有Activty是保

持相同的次序。

志一般用于呈型的行:提供用一系列可以独完成的事情,与启Actiity完全无关。

使用,如果正在启的ActiityTsk在运行的,那么,新的Actvity将不会启;代替的,当前Tsk会简单的移入前台。参考FLAG_ATIITY_MULTIPLE_TASK,可以禁用一行

这个标志不能用于调用方对已经启动的Activity 请求结果。
FLAG_CTIVIT_CLEAR_TP 如果设置,并且这个
vity 都将关闭,然后这个Intnt会作为一个新的Intnt 投递到

老的Acivity在位于端)中。

例如,假设一个Tsk中包含这些Activity:A,B,CD。如果D调用了startAtiit(),并且包含一个指向ActiityB的Inent,那么,C和D都将结束,然后B接收到这个Intent,因此,目前stack的状况是:A,B。 上例中正在运行的AcivitB既可以在onNewIntent)中接收到这个新的Intent,也可以把自己关闭然后重新启动来接收这个Intent。如果它的启动模式声明 为“multiple”(默认值),并且你没有在这个Itnt中设置FLA

_CIVITY_SINGE_TOP志,那么它将关然后重新建;于其它的启模式,或者在Intent置FLAG_ACTIVIY_SNGLE_TOP,都将把Itent到当前例的onNewIntent()中。 个启模式可以与FLAG_CTIVIT_EW_TSK合起来使用:用于启一个Task中的根Activity,它会把那个Task中任何运行的入前台,然后清除它直到根Actvity非常有用,例如,当从NotificatinManager一个Actvty

LAG_ACTIVITY_REST_ASK_IF_NEEDE

如果设置这个标志,这个atvity不管是从一个新的栈
启动还是从已有栈推到栈顶,它都将以the frontdoorof the
或者直接重置该栈为初始状态。

FLAG_ACTIVT_SINLE_TOP
如果,Activity位于stack的端运行,不再启一个新的
FLA_ACTIVIY_BROUGT_TO_FOT志一般不是由程序代码设置的,如在lanchodesingleTak模式帮你定。

FAG_ACTIVITY_LER_WHEN_TS_RSET 果设置,这将在Task的Actvitstak 中设置一个还原点,

Task恢复,需要清理Activty。也就是,下一次TaskFLAG_ACIVIT_ESET_ASK_IF_NEEDED标记进入前台(典型的操作是用在主画面重启它),个Acivity和它之上的都将关,以至于用不能再返回到它,但是可

以回到之前的Ativity。

在你的程序有分割点的候很有用。例如,一个e-al用程序可能有一个操作是看一个附件,需要启动图浏览Activity示。个Actvity应该e-ai用程序Task的一部分,为这是用Task中触的操作。然而,

当用户离开这个Task,然后从主画面选择e-mail ap,我们可
能希望回到查看的会话中,但不是查看图片附件,因为这让人
FLAG_ACTIVITY_EXCLUE_FRM_RCENTS 如果

,新的Activity不会在最近启Ativity的列表中保存。

FA_ACTIVITY_ORAR_RESUL
如果,并且Intent用于从一个存在的Actiity一个新的Activt,那么,个作答复目Activity将会个新的Activiy中。种方式下,新的Activity可以setResultint),并且那个作答复目

的Aciviy



FLAG_ACTIVITY_LAUNCHED_FRM_HISTORY志一般不由用程序代码设,如果个Activity是从记录里启(常按HOME),那么,系会帮你定。FLAG_ACTIVTY_MULTIPLE_TASK 不要使用志,除非你自己实现用程序启器。与FLAG_ACTIVTY_NEW_TAK合起来使用,可以禁用把已存的Tsk送入前台的行。当,新的Task是会启Itet,而不管是是否已有一个Task可以理相同的事情。 由于默的系不包含Tak管理功能,因此,你不应该

使用这个标志,除非你提供给用户一种方式可以返回到已经
启动的Tak如果FAG_ACTIVIY_NW_TASK
FLAG_ACTIVITY_NO_NIMATIO

如果在Intent置,并传递给ontext.sartActivity()的志将阻止系统进入下一个Actvity时应Aitivity迁移画。并不意味着画将永不运行——如果另一个Ativity在启动显示之前,没有指定志,那么,画将被用。志可以很好的用于行一串的操作,画被看作是更高一的事件的驱动

FLAG_ACTIVITY_O_HISORY
如果设置,新的Activity将不再历史stck中保留。用户一离

开它,Actvity就关了。也可以通过设noHitory

性。

FAG_ACIVITY_NO_USER_ACTION如果,新启的Activity入前台志将在Actvit停之前阻止从最前方的ActvityoUerLeaveHint() 典型的,一个Activity可以依赖这个回指明式的用户动作引起的Atviy移出后台。个回Activty的生命周期中标记一个合适的点,并关一些Notiicatin 如果一 Aciity通非用户驱动的事件,如来闹钟,启的,

个标志也应该传递给Cotext.startActiity,保证暂停的A
ctivity 不认为用户已经知晓其Notification
xistingone, thecurrent activity ill not be cuntedas

theopactivitfordecidingheterhenew itent
shouldedeieredtohetopinsteadftartnanew n.Thepreiousactvtwillbe uedas thetop, wththeassumptiobeingthatteurrnactivitywillinishiselfimmdiatel.

LAG_ACTIVTY_RERDE_TO_FROT 如果在Intnt中设置,并传递给Cntex.strtctiviy(),这个标志将引发 已经运行的Activiy移动到历史stck的顶端。


例如,一个Task由四个Actiiy:A,,,D。如果Dstartciviy()来启AtvityB,那么,B会移stack,在的次序AC,,B。如果FLAG_ACTIVITY_CLAR_TOP志也置的,那么志将被忽

略。

9描述下Actvity的生命周期。

答:atvity的生命周期方法有:onCreate()oStart()、oneStrt()onesume)onaus()、onSto()onDesory();
生命周期:onStr()直到系统调oStop()

前台生命周期:从onReum()直到系统调用onPause)
10ativity 在屏幕旋转时的生命周期

;设置Activty的android:cnfighnges="oienttio",

切屏是会重新用各个生命周期,切横、只会行一次;Activity的androi:confgChanes="orientation|kybardidden,切屏不会重新用各个生命周期,只会onofgurationCaned方法
11如何启用Servce,如何停用Sevice

的开较简单,如下:

第一步:承Sevice
public clas SMSSrice eteds Servic{}



第二步:AdrodManifest.xml文件中的<applcation>点里务进行配置:<ericeandoi:ae".SMSerice"/


不能自己运行,需要通过调用Conext.strtServce()或Context.bindSevice()方法启两个方法都可以启Sevie,但是它的使用合有所不同。使用startService)方法启用服用者与服没有关,即使用者退出了,仍然运行。使用bindSrvce()方法启用服用者与服务绑定在了一起,用者一旦退出,也就,

有“不求同时生,必须同时死”的特点。
如果打算采用Context.startevic()方法启动服务,在服
创建,多次调用statSrvie()方法并不会导致多次创建服务,

致多次用onStart()方法。采用statSevic()方法启的服,只能用Context.stopServie()方法束服,务结onDestro()方法。

如果打算采用Context.bidServie()方法启动服务,在服务未被创建时,系统会先调用服务的onCreae)方法,接着调用onin()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnind()方法,接着调 oDesroy()方法。如果调用bindSrvice()方法前服务已经

定,多次bndService()方法并不会致多次建服(也就是onCrete()oBid()方法并不会被多次)。如果用者希望与正在定的服解除,可以用unbinderice()方法,方法也会致系统调用服onUnbid()--onDesroy()方法。

常用生命周期回方法如下:
onreate(方法在服时调用,方法只会被用一次,无论调用多少次startServce()或bindSevice)方法,服

务也只被创建一次。
onDestro()该方法在服务被终止时调用。
方法onStart()只有采用Contxt.startSrvic()方法启动服务时才

会回调该方法。方法在服开始运行用。多次用startService()方法尽管不会多次建服,但onStat()方法会被多次用。

与采用Context.bindServie()方法启有关的生命周期

方法
onin()只有采用Contxt.bidervice()方法启动服务时才会回调该方法。该方法在调用者与服务绑定时被调用,当调 用者与服务已经绑定,多次调用Context.bindServie()方法并

不会方法被多次用。

onUnind()只有采用Context.bindServie()方法启务时才会回调该方法。方法在用者与服解除

12注册广播有几种方式,些方式有何缺点?请谈谈Andoid引入广播机制的用意。

:首先写一个Broadcasteceie
第一种:在清文件中声明,添加
<receiveandroi:nae=".IncomingSMSReciver">

inent-filter>
<action android:name=androidprovider.Tel
<receve>

第二种使用代码进行注册如:

ntentiterfilter= ewIntentilter("android.provider. eleponySS_REEIVD");
IncmingSSRciverreceiver= new IncomSSecei ver();
reiterRceiver(receiverfiltr)
两种注册类型的区别是:
1)第一种不是常驻型广播,也就是说广播跟随程序的生命周

期。

2)第二种是常型,也就是用程序关,如果有信息 广播来,程序也会被系统调用自运行。

13下在单线程模型中MesageHanderMessageQueeLooper的关系。

答:简单,Handler取当前线程中的looer,looer用来从存放MesageMesageQueue中取出Mesage,再有Hander行Messae的分.

Messae Queu(消息队列):用来存放通过Handlr 发布的消
息,通常附属于某一个创建它的线程,可以通过Loper.y
通过Handler发布消息,消息将只会发送到与它关联的消息

列,然也只能消息列中的消息
Looper:是Handler和消息列之讯桥,程序件首先通Handlr把消息传递给LooperLoper把消息放入列。

Loopr也把消息队列里的消息广播给所有的
anler:Hander接受到消息后调用handeesae进行处理Messge:消息的类型,在Handlr类中的handlMesage方法中得到单个的消息进行处理
在单线程模型下,为了线程通信问题,Android设计了一

MessageQueue(消息),线可以通过该MessagQueue合HandlerLoper行信息交。下面将们进行分:
1.essage
Message消息,理解为线交流的信息,理数据后台线程需要更新UI则发Mesage内含一些数据UI线程。

2.Hanlr
Hadlr理者,Msae的主要理者,负责esage的送,Message内容的理。后台线程就是通过传进

来的 Hander对象引用来sendMessageMessg)。而使用
Handler,需要implement 该类的 handleMessae(Message)
3. Message ueue

Mssageueue消息列,用来存放通Handlr布的消息,按照先先出行。

每个mesagequee都会有一个对应的HandlerHandler会向messaequeue 通过两种方法发送消息:senMesage或post。这两种消息都会插在mesagequeue队尾并按先进先出执行。但通过这两种方法发送的消息执行的方式略有不同:通过sendMessage发送的是一个mesage对象,会被Handler handlMessge()函数处理;而通过pot方法发送的是一

runnal,会自己行。

.Loope
Lopr是每条线程里的MessageQueue的管家。

Android没有GobalMessagQeue,而Android会自替主线程(UI线)建立MsageQuee,但在子线程里并没有建立MesageQeue。所以Looper.getManLoopr)得到的主线程的LooprULL,LoopermyLooper)得到当前线程的Looer就有可能UL于子线程使用LooerAPIDoc提供了正确的使用方法:个Message机制

的大概流程:
1. Loopr.lop()方法运行开始后,循环地按照接收顺
的。当Hndle.sndMessageMesage)Message uee,

函数里面设置了那个Message对象的target属性是当前的Hndlr对象。随后Looper取出了那个Mesge,则调用该Mesaetarget指向的HanderdispatchMessae函数对Messae进行处理。在dipatcMsage方法里,如何处理Message则由用户指定,三个判断,优先级从高到低:
1) Message里面的Callback,一个实现了Runabe接口的对象,其中run函数做处理工作;
2)Handler 里面的mCallbck指向的一个实现了Cal

ack接口的象,由其hndleMessae理;
3)理消息Handlr对应类继承并实现了其中handleMessage函数,通过这实现hndleMessage函数

理消息。

由此可,我们实现hndleMessge方法是最低的!

3. Handler理完Messag(updateUI)后,Looer则设essageULL,以便回收!

在网上有很多文章述主线程和其他子线程如何交互,

传送信息,最终谁来执行处理信息之类的,个人理解是最简
单的方法——判断Handler对象里面的Looer 对象是属于哪
在线程的Looper;

2. Looer.getMainLoope()得到的是主线程的Looper对象,Lopr.myLooper()得到的是当前线程的Loper对象。14、简要解释一下actvtyinent intetflter、sevice、BroadcaseBroadcaseRecever
:一个activity呈现了一个用户可以操作的可视化用户界面;一个service不包含可见的用户界面,而是在后台运行,可以与一个ativiy绑定,通过绑定暴露出来接口并与其进行通 ;一个broadcastrecever是一个接收广播消息并做出回应

componentbroadcastreeiver没有界面;一个intnt是一个Inet象,它保存了消息的内容。actvty和serice,它指定了求的操作名称和待操作数据的URI,Intet象可以式的指定一个目component。如果这样,android会找到cmonent(基于manifest文件中的声明)并激活它。但如果一个目不是式指定的,nroid必找到响itent的最佳component。它是通Intet象和目的intetflter相比来完成一工作的;一个copnentintenfitrandroidcomponent理的intent。itntil

er 也是在manfest文件中声明的。
15、说说mvc 模式的原理,它在android 中的运用,andoid
模型(modl)对象:是应用程序的主体部分,所有的业务逻

应该写在该层

视图(iew):用程序中负责生成用界面的部分。也是在整个mc架构中用唯一可以看到的一,接收用,果。

控制器(ontol象:是根据用入,控制用界面数据示及更新moel象状的部分,控制器更重要的一种航功能,响的相关事件,交m层处理。

adod鼓励弱耦合和组件的重用,在android中mvc的具

体体如下:
1)视图层view):一般采用xml文件行界面的描述,使用的候可以非常方便的引入,当然,如果你android了解的比的多了,就一定可以想到在android中也可以使用javascit+html等的方式作vie,当然里需要jaajavascript的通信,幸运的是,andoid提供了它非常方便的通信实现

)控制(controlr):android的控制的重任通常落在了众多的acitvity的肩上,也就暗含了不要在acitiity中写

代码,要通过activity 交割model 业务逻辑层处理,这样做的另
外一个原因是android 中的acitiity 的响应时间是5s,如果耗
该在model 里面处理,当然对业务计算等操作也是必须放在

该层的。

16什么是ANR如何避免它?

:ANRAppiaionNotResponding。在Adoid,管理器和窗口管理器两个系务负责监视应用程序的响,当用操作的在5s用程序没能做出反,BroadcastReeiver在10秒内没有行完,就会出现应用程序无响应对话框,既是ANR

避免方法:Actiity应该在它的关键生命周期方法(如onrete)

和onResume())里尽可能少的去做建操作。潜在的耗操作,例如网或数据操作,或者高耗算如改尺寸,应该在子线程里(或者异步方式)来完成。主线应该为线程提供一个Handlr,以便完成提交线程。

17什么情况会FreClose?如何避免?能否捕获导致其的异常?

答:程序出异常,比如nllpointer。

避免:写程序时逻辑连贯,维缜密。能捕异常,在logca

中能看到异常信息

18、描述一下android 的系统架构
adoid 系统架构分从下往上为linux 内核层、运行库、应
以及内存管理等功能。

libaries adroidruntie:librares:即c/c++函数库部分,大多数都是开放源代码的函数库,例如wekit(引擎),该函数库负责android网页浏览器的运行,例如标准的c函数库lbc、openslsqie,当然也包括支持游戏开发2sgl和3dpnge,在多媒体方面有mdiaramwork框架来支持各种影音和图形文件的播放与显示,例如mpeg4h.64、mp3、aacamr、jpgpng 等众多的多媒体文件格式。android runtime 负责解释和执行生成的dalvk格式的字节码。


applcationframework(件架构),java用程序开主要是使用该层封装好的api行快速开

appliction:该层jaa用程序,ndroid内置的googlemaps、e-mil、即通信工具、浏览器、mp3播放器等该层java的程序也该层,而且和内置的用程序具有平等的位置,可以用内置的用程序,也可以替内置的用程序。

上面的四个次,下层为,上需要下的支持,用下的服格分的方式来的极大的定性、

灵活性和可扩展性,使得不同层的开发人员可以按照规范专
心特定层的开发。
写出优质高效的程序就必须对整个 appicationframework

行非常深入的理解。精通aplcatinframewok,你就可以真正的理解android设计和运行机制,也就更能够驾驭整个的开

19ContetPovider是如何实现数据共享的。

一个程序可以通过实现一个Cnentrovider的抽象接口将自己的数据完全暴露出去,而且Cntetroviders是以类似数据库中表的方式将数据暴露。Contetroviders存储 和检索数据,通过它可以让所有的应用程序访问到,这也是

用程序之唯一共享数据的方法。

要想使用程序的数据公开化,可通2种方法:建一个属于你自己的Contentprovder或者将你的数据添加到一个已存在的Cntentroidr,前提是有相同数据型并且有写入Contetprovier限。

如何通一套准及一的接口取其他用程序暴露的

数据?

Andrid提供了Cntntesolver,外界的程序可以通CntenResolvr接口访问ontentProvider提供的数据。

20Sevice Thrad的区别?
:servie是系统的组件,它由系统进程托管(srvicemaager);
一种ipc。而thead是由本应用程序托管。

1).Thread:Tread是程序行的最小,它是分配CPU的基本位。可以用Thread行一些异步的操作。

2). ervc:Serviceandroid 的一种机制,当它运行的时候如果是LocalSerice,那么对应的Serice 是运行在主进程的min线程上的。如:onreateonStart这些函数在被系统调用的时候都是在主进程的main线程上运行的。如果是RemoteService,那么对应的 Service则是运行在独立进程 的main线程上。


既然这样,那么我们为什么要用Serice呢?其实这andoid的系机制有关,先拿ThreadThread的运行是独立于Activiy,也就是当一个Actvityfnish之后,如果你没有主停止Thread或者Tread里的run方法没有行完,Thred也会一直行。因此里会出一个问题:当Acivity被finish之后,你不再持有Thread的引用。另一方面,你没有法在不同的Activity同一Threa行控制。

个例子:如果你的Thread需要不停地隔一段时间

要连接服务器做某种同步的话,该 Thread 需要在 Activity
没有start 的时候也在运行。这个时候当你 sat 一个 At
面创建、运行并控制该 Thread,这样便解决了该问题(因为任

Activiy都可以控制同一Service,而系也只会建一个对应Service的)

因此你可以把 Serice想象成一种消息服务,而你可以在任何有Context 的地方调用Conext.statSevice、Cntet.stopServiceCotext.bidService,Contet.nindSerice,来控制它,你也可以在Service 里注册Broadcasteceier,在其他地方通过发送broadcast来控制它,当然这些都是Thr ad 做不到的。


21Anrod本身的ai并未声明会抛出异常,其在运行有无可能抛出rntime异常,你遇到过吗有的致什么问题?如何解决?

:会,比如nulloiterException。我遇到,比如
textview.setText()textviw没有初始化。会致程序无法正常运行出frecose。打开控制台locat信息找出

异常信息并修改程序。

22IntetService有何?

答:Acitivity 的进程,当处理Intent 的时候,会产生一个对应的S
eviceAndroid 的进程处理器现在会尽可能的不kll 掉你;
常容易使用

:重写onSaveInstanceState()方法,在此方法中保存需要保

存的数据,方法将会在acivity被回收之前用。通重写onRstorInstancette()方法可以从中提取保存好的数据24如何将一个Acivity置成窗口的式。

答:<activity>中配置:android:them="@andrid:styl/Thm.Dialog"
另外android:teme=@andod:tyeTeme.Transluent"是设置透明
25、如何退出Actvty?如何安全退出已调用多个Activity

Aplicatin

答:Activity用来,退出很简单,直接fns()即可。当然,也可以用killProes()Sytem.exit()这样的方法。于多个activity,1记录打开的Actvity:每打开一个Actvity,记录下来。在需要退出,关每一个Activty即可。2送特定广播:在需要,送一个特定的广播,每个Activity收到广播后,关即可。3、递归退出:在打开新的Activiy使用startActiityFoReult,然后自己加志,在onActvityResult理,递归程方便,最好定

义一个Actiity基类,处理这些共通问题。

方法。它可以直接结束整个应用。在使用时需要权限anrid.p

rmision.RESTRT_PACAGES

注意不要被它的名字迷惑。

可是,2.2个方法失效了。在2.2添加了一个新的方法,killBackgroundrcesses(),需要限andrid.p
rmissionKILL_BACKGROUND_PROCESSES。可惜的是,它和2.2restartPackage一,根本起不到有的效果。

另外还有一个方法,就是系统自带的应用程序管理里,强 制结束程序的方法,forceSopPackage()。它需要权限andr

id.pemision.FORCE_TOP_PCKAES。并且需要添加andoidshareUserId="android.uid.syte"属性。同可惜

的是,方法是非公开的,他只能运行在系统进程,第三方

程序无法用。

需要在Android.mk中添加LOCAL_CERTIICATE:=

platform。

Andoid.mk是用于在Anroid源编译程序用的。从以上可以看出,在22,没有法直接束一个用,而只

能用自己的到。

现提供几个方法,供参考:
1、抛异常强制退出:
弹出Fore Close的窗口。

2、记录打开的Ativity
每打开一个Acivity,就记录下来。在需要退出,每一

Activty即可。

3送特定广播:
在需要送一个特定的广播,每个Actiity收到

广播后,关即可。

4、递归退出
在打开新的Activty时使用startActiiyForRsult,然后自己

,onActvityResult理,递归

除了第一个,都是想法把每一个Activity束掉,接达到目的。但是这样做同不完美。你会发现,如果自己的用程序每一个Actvity都置了nsnor,在两个Activity束的隙,sensor可能有效了。但至少,我的目的达到了,而且没有影响用使用。程方便,最好定一个Activity基些共通问题

26AIL的全称是什么?如何工作?理哪些型的数

?
答:全称是:Andoid InerfaceDefinLanguae
递对象呢?显然, Java中不允许跨进程内存共享. 因此传递对

,只能把象拆分成操作系能理解的简单形式,以达到跨界访问的目的.在J2EE,采用RMI的方式,可以通序列化传递对.在Android,采用AIDL的方
式.理AIDL可以传递Bnde实际上做起来却比

AIDL(ndoid接口描述语言)是一种借口描述语言;编译器可以通过aidl文件生成一段代码,通过预先定义的接口 达到两个进程内部通信进程的目的.如果需要在一个Ativt

y中,访问另一个Servie中的某个,需要先将化成AIL识别的参数(可能是多个参数),然后使用AIDL传递这些参数,在消息的接收端,使用些参数装成自己需要的.

ADLIPC的机制和COMCORBA,是基于接口的,但它是的。它使用代理在客端和实现层间传递值.如果要使用AIL,需要完成2件事情:1. 引入AIDL的相关.;.用aid生的class.

IDL建方法:

AIL 语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。由于远程调用的需要,这
类型: 1. 不需要imort 声明的简单Java 编程语言类型(itboolan

)
2.String,ChrSequece不需要特殊声明
3.ist,MpPrcelables类型,这些类型内所包含的数据成员也只能是简单数据类型,Sring等其他比支持的类型.(另外: 我没尝试Parcelbls,Eclipse+ADT下编译不过,或许以后会有所支持)
27、请解释下Anroid程序运行时权限与文件系统权限的 区别。


答:运行时权Dlvik(android)
文件系linux内核授
28上安装了多种浏览器,能否指定某浏览访问指定?请说明原由。

直接Uri把参数带过,或者通manifest里的intetilter里的data属性

29android优势和不足
:Android平台手机5大优势:

一、开放性
在优势方面,Android平台首先就是其开发性,开发的平台允
一个崭新的平台也将很快走向成熟。开放性对于Andoid

展而言,有利于累人气,里的人气包括消者和厂商,

于消者来,随大的受益正是丰富的源。开放的平台也会来更大争,如此一来,者将可以用更低的价位得心的手机。

二、挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营 商的控制。从去年iPhone上市,用户可以更加方便地连接网

,运商的制减少。随着EDGEHSDP2G3G的逐步渡和提升,手机随意接入网已不是运商口中的笑,当你可以通手机IM件方便地行即聊天,再回想不久前天价的彩信和图铃载业务,是不是像噩梦一?网巨GoogleAndroi端天生就有网特色,离互网更近。

三、丰富的硬件选择
一点是与Adroid平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种品。

功能上的差异和特色,却不会影响到数据同步、甚至软件的
兼容,好比你从诺基亚 Sybian 风格手机一下改用苹果
四、不受任何限制的开发商

ndrid平台提供第三方开商一个十分泛、自由的,不会受到各种条条框框的阻,可想而知,会有多少新颖别致的件会生。但也有其两面性,血腥、暴力、情色方面的程序和游如可控制正是留ndroid难题之一。

五、无缝结合的Google 应用
如今叱诧互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等 已经成为连接用户和互联网的重要纽带,Android平台手机

将无缝结秀的Google

ndod5大不足:
一、安全和
由于手机与互网的系,个人私很得到保守。除了上网程中意或不意留下的个人足迹,Google个巨人也时时站在你的身后,洞穿一切,因此,网的深入将会来新一私危机。

二、首先开Adoid手机的不是最大运
众所周知,-Moble23日,于美国纽约发布了Andrid

款手机G1。但是在北美市场,最大的两家运营商乃A&T
Vrizon,而目前所知取得Androd 手机销售权的仅有
佳的3G 网络服务则要另当别论了!

三、运商仍然能影响到Android手机
在国内市,不少用户对购得移定制机不,的手机被人涂画了广告一般。这样的情况在国外市。Anrod手机的另一售运Sprint就将在其机型中内置其

手机商店程序。

四、同类机型用户减少
在不少手机论坛都会有针对某一型号的子论坛,对一款手机 的使用心得交流,并分享软件资源。而对于Andoid平台手机,

由于厂商丰富,型多这样使用同一款机型的用越来越少,缺少一机型的程序化。个稍不当的例子,在山寨机泛,品种各异,就很少有专门针对某个型号山寨机的讨论和群,除了哪些功能异常眼、受追捧的机型以外。

五、分依商缺少准配置res://XDct.xewod.html- #在使用PC端的WindwsXp系,都会内置微WindowsMeiaPlaye这样一个浏览器程序,可以选择更多的播放器,如Relplay或暴影音等。但入手开始使用默

的程序同样可以应付多样的需要。在 Anroid平台中,由于其
开放性,软件更多依赖第三方厂商,比如Adrid系统的SDK
30Androiddvm 的进程和Linux 的进程,应用程序的进

程是否同一个概念
答:DVM指dalivk的虚机。每一个Androi用程序都在它自己的程中运行,有一个独立的Dalvk例。而每一个DM都是在Linux中的一个程,所以可以认为是同一个概念。

31sim卡的EF文件是什么?有何作用
:im卡的文件系统有自己规范,主要是为了和手机通讯,si m本身可以有自己的操作系统,EF就是作存储并和手机通

用的
32嵌入式操作系内存管理有哪几种,各有何特性 式,段式,,用到了MMU,虚等技
33什么是嵌入式实时操作系,Adrid操作系属于 实时操作系统吗

嵌入式实时操作系是指当外界事件或数据,能接受并以足快的速度予以,理的果又能在定的时间之内来控制生产过程或对处理系作出快速响,并控

制所有实时务协调一致运行的嵌入式操作系。主要用于

工业控制、军事设备、 航空航天等领域对系统的响应时间
有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬
中文70(包括标点),英文160160 个字节。

35有一个一整型数it[]data保存的是一张宽为idth,heght片像素信息。写一个算法,该图片所有的白色不透明(0xffffffff)像素点的透明度50%

36如何将SQite数据dctoarydb文件)与apk 件一起

解答:可以将dictioary.db文件复制到Eclipsendroid 程中的resaw 目录中。所有在rsw 目录中的文件不会被压

这样可以直接提取中的文件。可以将dictonary.db文件复制到resaw
37如何将打开resaw目中的数据文件?

解答:在Android中不能直接打开resaw中的数据文件,而需要在程序第一次启动时文件复制到手机内存或SD卡的某个目,然后再打开数据文件。

复制的基本方法是使用getResourcs()opeRwesource方法resw源的InuStream象,然后将nputtream象中的数据写入其他的目中相文件中。

Android SK 中可以使用SQLiteDatabase.openrCreat
Databae 方法来打开任意目录中的SLte 数据库文件。
堆栈等信息,TraceVew 是程序性能分析器。

39java中如何引用本地
可以用JNI(javanativeinterfac java本地接口)接口。

40、谈谈Android IPC(进程间通信)机制
IPC 是内部进程通信的简称,是共享"命名管道"的资源。Android中的IPC 机制是为了让Actviy和Service之间可以随时的进行交互,故在Andoid中该机制,只适用于AtiityServce之间的通信,类似于远程方法调用,类似于C/S模式的 访问。通过定义AIDL接口文件来定义IPC接口。Servier 端实

IPC接口,Cient端IPC接口本地代理。

41NDK是什么
NDK是一些列工具的集合,NDK提供了一系列的工具,帮助开者迅速的开C/C++的动态库,并能自so和java用打成apk包。

NDK集成了交叉编译,并提供了相mk文件和隔离cu、平台等的差异,开只需简单的修改mk文件就可以建出so





Copyright © 2019- ovod.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务