android笔试题及答案.docx
《android笔试题及答案.docx》由会员分享,可在线阅读,更多相关《android笔试题及答案.docx(22页珍藏版)》请在冰点文库上搜索。
android笔试题及答案
android笔试题及答案
【篇一:
android面试题带答案】
>1.math.round(11.5)等于多少().math.round(-11.5)等于多少(c)
a、?
?
11,-11b、11,-12c、12,-11d、12,-12
2下列程序段的输出结果是:
(b)
voidcomplicatedexpression_r(){
intx=20,y=30;
booleanb;
b=x50y60||x50y-60||x-50y60||x-50y-60;
system.out.println(b);
}
a、trueb、falsec、1d、011.activity
3.android中下列属于intent的作用的是(c)
a、实现应用程序间的数据共享
b、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
c、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
d、处理一个应用程序整体性的工作
失
4在android中使用menu时可能需要重写的方法有(ac)。
(多选)
a、oncreateoptionsmenu()
b、oncreatemenu()
c、onoptionsitemselected()
d、onitemselected()
5在android中使用sqliteopenhelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab)
a、getwriteabledatabase()
b、getreadabledatabase()
c、getdatabase()
d、getabledatabase()
6.android关于service生命周期的oncreate()和onstart()说法正确的是(ad)(多选题)
a、当第一次启动的时候先后调用oncreate()和onstart()方法
b、当第一次启动的时候只会调用oncreate()方法
c、如果service已经启动,将先后调用oncreate()和onstart()方法
d、如果service已经启动,只会执行onstart()方法,不在执行oncreate()方法7我们都知道hanlder是线程与activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(a)
a、ondestroy()
b、onclear()
c、onfinish()
d、onstop()
8关于res/raw目录说法正确的是(a)
a、这里的文件是原封不动的存储到设备上不会转换为二进制的格式
b、这里的文件是原封不动的存储到设备上会转换为二进制的格式
c、这里的文件最终以二进制的格式存储到指定的包中
d、这里的文件最终不会以二进制的格式存储到指定的包中
二.填空题
1.android中常用的四个布局是。
2.android的四大组件是
3.android中service的实现方法(两种)是和bindservice。
3.android的数据存储的方式,文件,网络。
4.当启动一个activity并且新的activity执行完后需要返回到启动它的activity来执行的
回调函数是
5.请描述下activity的生命周期。
必调用的三个方法:
oncreate()--onstart()--onresume(),用aaa表示
(1)父activity启动子activity,子actvity退出,父activity调用顺序如下
aaa--onfreeze()--onpause()--onstop()--onrestart()--onstart(),onresume()…
(2)用户点击home,actvity调用顺序如下
aaa--onfreeze()--onpause()--onstop()--maybe--ondestroy()–maybe
(3)调用finish(),activity调用顺序如下
aaa--onpause()--onstop()--ondestroy()
(4)在activity上显示dialog,activity调用顺序如下
aaa
(5)在父activity上显示透明的或非全屏的activity,activity调用顺序如下
aaa--onfreeze()--onpause()
(6)设备进入睡眠状态,activity调用顺序如下
aaa--onfreeze()--onpause()
6.请介绍下android的数据存储方式。
一.sharedpreferences方式
二.文件存储方式
三.sqlite数据库方式
四.内容提供器(contentprovider)方式
五.网络存储方式
7.请介绍下contentprovider是如何实现数据共享的。
创建一个属于你自己的contentprovider或者将你的数据添加到一个已经存在的contentprovider中,前提是有相同数据类型并且有写入contentprovider的权限。
8.如何启用service,如何停用service。
android中的service类似于windows中的service,service一般没有用户操作界面,它运行
于系统中不容易被用户发觉,
可以使用它开发如监控之类的程序。
一。
步骤
第一步:
继承service类
publicclasssmsserviceextendsservice{}
第二步:
在androidmanifest.xml文件中的application节点里对服务进行配置:
serviceandroid:
name=.demoservice/
二。
context.startservice()和context.bindservice
服务不能自己运行,需要通过调用context.startservice()或context.bindservice()方法启动服务。
这两个方法都可
以启动service,但是它们的使用场合有所不同。
1.使用startservice()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
使用bindservice()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。
2.采用context.startservice()方法启动服务,在服务未被创建时,系统会先调用服务的oncreate()方法,
接着调用onstart()方法。
如果调用startservice()方法前服务已经被创建,多次调用startservice()方法并
不会导致多次创建服务,但会导致多次调用onstart()方法。
采用startservice()方法启动的服务,只能调用context.stopservice()方法结束服务,服务结束时会调用
ondestroy()方法。
【篇二:
华为android面试题及答案】
用程序的进程是否为同一个概念
dvm指dalivk的虚拟机。
每一个android应用程序都在它自己的进程中运行,都拥有一个独立的dalvik虚拟机实例。
而每一个dvm都是在linux中的一个进程,所以说可以认为是同一个概念。
2、sim卡的ef文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,ef就是作存储并和手机通讯用的
3、嵌入式操作系统内存管理有哪几种,各有何特性
页式,段式,段页,用到了mmu,虚拟空间等技术
4、什么是嵌入式实时操作系统,android操作系统属于实时操作系统吗?
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。
主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。
又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。
5、一条最长的短信息约占多少byte?
中文70(包括标点),英文160,160个字节。
6、android中的动画有哪几类,它们的特点和区别是什么?
两种,一种是tween动画、还有一种是frame动画。
tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
7、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。
8、说说mvc模式的原理,它在android中的运用
android的官方建议应用程序的开发采用mvc模式。
何谓mvc?
mvc是model,view,controller的缩写,mvc包含三个部分:
l模型(model)对象:
是应用程序的主体部分,所有的业务逻辑都应该写在该层。
l视图(view)对象:
是应用程序中负责生成用户界面的部分。
也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
l控制器(control)对象:
是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。
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里面处理,当然对业务计算等操作也是必须放在的该层的。
9、activity的生命周期
和其他手机平台的应用程序一样,android的应用程序的生命周期是被统一掌控的,也
就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并适应它。
简单地说一下为什么是这样:
我们手机在运行一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。
言归正传,activity的基本生命周期如下代码所示:
java代码
public
classmyactivityextendsactivity{
protected
voidoncreate(bundlesavedinstancestate);
protected
voidonstart();
protected
voidonresume();
protected
voidonpause();
protected
voidonstop();
protected
voidondestroy();
}
publicclassmyactivityextendsactivity{protectedvoidoncreate(bundlesavedinstancestate);protectedvoidonstart();protectedvoidonresume();protectedvoidonpause();protectedvoidonstop();protectedvoidondestroy();}
你自己写的activity会按需要重载这些方法,oncreate是免不了的,在一个activity正常启动的过程中,他们被调用的顺序是oncreate-onstart-onresume,在activity被干掉的时候顺序是onpause-onstop-ondestroy,这样就是一个完整的生命周期,但是有人问了,程序正运行着呢来电话了,这个程序咋办?
中止了呗,如果中止的时候新出的一个activity是全屏的那么:
onpause-onstop,恢复的时候onstart-onresume,如果打断这个应用程序的是一个theme为translucent或者dialog的activity那么只是onpause,恢复的时候onresume。
详细介绍一下这几个方法中系统在做什么以及我们应该做什么:
oncreate:
在这里创建界面,做一些数据的初始化工作
onstart:
到这一步变成用户可见不可交互的
onresume:
变成和用户可交互的,(在activity栈系统通过栈的方式管理这些个activity的最上面,运行完弹出栈,则回到上一个activity)
onpause:
到这一步是可见但不可交互的,系统会停止动画等消耗cpu的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候
你的程序的优先级降低,有可能被系统收回。
在这里保存的数据,应该在
onresume里读出来,注意:
这个方法里做的事情时间要短,因为下一
个activity不会等到这个方法完成才启动
onstop:
变得不可见,被下一个activity覆盖了
ondestroy:
这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用isfinishing()来判
断它,如果你有一个progressdialog在线程中转动,请在ondestroy里
把他cancel掉,不然等线程结束的时候,调用dialog的cancel方法会抛
异常的。
onpause,onstop,ondestroy,三种状态下activity都有可能被系统干掉
为了保证程序的正确性,你要在onpause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库)。
实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?
因为activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般都是采用android的消息机制[handler,message]来处理多线程和界面交互的问题。
10、让activity变成一个窗口:
activity属性设定
讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很简单你只需要设置一下activity的主题就可以了在androidmanifest.xml中定义activity的
地方一句话:
xml代码
android:
theme=‖@android:
style/theme.dialog‖
android:
theme=‖@android:
style/theme.dialog‖
这就使你的应用程序变成对话框的形式弹出来了,或者
xml代码
android:
theme=‖@android:
style/theme.translucent‖
android:
theme=‖@android:
style/theme.translucent‖
就变成半透明的,[友情提示-.-]类似的这种activity的属性可以在android.r.styleable类的androidmanifestactivity方法中看到,androidmanifest.xml中所有元素的属性的介绍都可以参考这个类android.r.styleable
上面说的是属性名称,具体有什么值是在android.r.style中可以看到,比如这个‖@android:
style/theme.dialog‖就对应于android.r.style.theme_dialog,(?
_‘换成‘.‘--注意:
这个是文章内容不是笑脸)就可以用在描述文件中了,找找类定义和描述文件中的对应关系就都明白了。
11、你后台的activity被系统回收怎么办:
onsaveinstancestate
当你的程序中某一个activitya在运行时中,主动或被动地运行另一个新的activityb这个时候a会执行
java代码
public
voidonsaveinstancestate(bundleoutstate){
super.onsaveinstancestate(outstate);
outstate.putlong(id,1234567890);
}
b完成以后又会来找a,这个时候就有两种情况,一种是a被回收,一种是没有被回收,被回
收的a就要重新调用oncreate()方法,不同于直接启动的是这回oncreate()里是带上参数savedinstancestate,没被收回的就还是onresume就好了。
savedinstancestate是一个bundle对象,你基本上可以把他理解为系统帮你维护的一个map对象。
在oncreate()里你可能会用到它,如果正常启动oncreate就不会有它,所以用的时候要判断一下是否为空。
java代码
if(savedinstancestate!
=null){
longid=savedinstancestate.getlong(id);
}
就像官方的notepad教程里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。
这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦,没准你需要记住滚动条的位置...
12、调用与被调用:
我们的通信使者intent
要说intent了,intent就是这个这个意图,应用程序间intent进行交流,打个电话啦,来个
电话啦都会发intent,这个是android架构的松耦合的精髓部分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先:
java代码
intentintent=newintent();
intent.setaction(intent.action_call);
intent.setdata(uri.parse(tel:
+number));
startactivity(intent);
扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。
什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这个部分设计地确实很好啊。
那intent通过什么来告诉系统需要谁来接受他呢?
通常使用intent有两种方法,第一种是直接说明需要哪一个类来接收代码如下:
java代码
intentintent=newintent(this,myactivity.class);
intent.getextras().putstring(id,1);
tartactivity(intent);
第一种方式很明显,直接指定了myactivity为接受者,并且传了一些数据给myactivity,在myactivity里可以用getintent()来的到这个intent和数据。
第二种就需要先看一下androidmenifest中的intentfilter的配置了
xml代码
action
android:
name=android.intent.action.view
/
action
android:
value=android.intent.action.edit
/
action
android:
value=android.intent.action.pick
/
category
android:
name=android.intent.category.default
/
data
android:
mimetype=vnd.android.cursor.dir/vnd.google.note
/
这里面配置用到了action,data,category这些东西,那么聪明的你一定想到intent里也会有这些东西,然后一匹配不就找到接收者了吗?
action其实就是一个意图的字符串名称。
上面这段intent-filter的配置文件说明了这个activity可以接受不同的action,当然相应的程序逻辑也不一样咯,提一下那个mimetype,他是在contentprovider里定义的,你要是自己实现一个contentprovider就知道了,必须指定mimetype才能让数据被别人使用。
不知道原理说明白没,总结一句,就是你调用别的界面不是直接new那个界面,而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊,而且符合了生命周期被系统管理的原则。
想知道category都有啥,android为你预先定制好的action都有啥等等,请亲自访问官方链接intent
ps:
想知道怎么调用系统应用程序的同学,可以仔细看一下你的logcat,每次运行一个程序的时候是不是有一些信息比如:
startingactivity:
intent
【篇三:
android工程师笔试题及答案】
xt>一、基础(79分)
1.strin