《面试题目及其答案大全.pdf》由会员分享,可在线阅读,更多相关《面试题目及其答案大全.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面试题目及其答案面试题目及其答案1 1、Android dvmAndroid dvm 的进程和的进程和 LinuxLinux 的进程的进程,应用程序的进程是否为同一个概念应用程序的进程是否为同一个概念DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。2 2、simsim 卡的卡的 EFEF 文件有何作用文件有何作用sim 卡的文件系统有自己规范,主要是为了和手机通讯,sim 本 身可以有自己的操作系统,EF 就是作存储并和手机通讯用
2、的3 3、嵌入式操作系统内存管理有哪几种,、嵌入式操作系统内存管理有哪几种,各有何特性各有何特性页式,段式,段页,用到了MMU,虚拟空间等技术4 4、什么是嵌入式实时操作系统什么是嵌入式实时操作系统,Android,Android 操作系统属于实时操作系统吗操作系统属于实时操作系统吗?嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实
3、时两种,而 android 是基于 linux 内核的,因此属于软实时。5 5、一条最长的短信息约占多少、一条最长的短信息约占多少 byte?byte?中文 70(包括标点),英文 160,160 个字节。6 6、androidandroid 中的动画有哪几类,它们的特点和区别是什么中的动画有哪几类,它们的特点和区别是什么?两种,一种是Tween动画、还有一种是Frame 动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。7 7、handlerhandler 机制的原理机制
4、的原理andriod 提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。1)Looper:一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue(消息队列)。2)Handler:你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收 Looper 从 Message Queue 取出)所送来的消息。3)Message Queue(消息队列):用来存放线程放入的消息。4)线程:UI
5、thread 通常就是 main thread,而 Android 启动程序时会替它建立一个MessageQueue。8 8、说说、说说 mvcmvc 模式的原理,它在模式的原理,它在 androidandroid 中的运用中的运用MVC(Model_view_contraller)”模型_视图_控制器”。MVC 应用程序总是由这三个部分组成。Event(事件)导致 Controller 改变 Model 或 View,或者同时改变两者。只要 Controller 改变了 Models 的数据或者属性,所有依赖的View 都会自动更新。类似的,只要Contro9 9、ActivityActiv
6、ity 的生命周期的生命周期和其他手机 平台 的应用 程序 一样,Android 的应用程序 的生命周期是被统一掌控 的,也 就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并适应它。简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话 发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另 外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可 能被干掉。言归正传,Activity 的基本生命周期如下代码 所示:Java 代码1.public2.class MyActivity extends
7、 Activity 3.protected4.void onCreate(Bundle savedInstanceState);6.protected7.void onStart();9.protected10.void onResume();12.protected13.void onPause();15.protected16.void onStop();18.protected19.void onDestroy();20.22.public class MyActivity extends Activity protected void onCreate(Bundle savedInst
8、anceState);protected void onStart();protected void onResume();protected void onPause();protected void onStop();protected void onDestroy();你自己写的 Activity 会按需要 重载这些方法,onCreate 是免不了的,在一个 Activity 正常启动的过程中,他们被调用的顺序是 onCreate-onStart-onResume,在 Activity 被干掉的时候顺序是 onPause-onStop-onDestroy,这样就是一个完整的生命周期,但是
9、有人问了,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个 Activity 是全屏的那么:onPause-onStop,恢复的时候onStart-onResume,如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause,恢复 的时候 onResume。详细介绍一下这几个方法中系统在做什么以及我们应该做什么:onCreate:在这里创建界面,做一些数据 的初始化工作onStart:到这一步变成用户可见不可交互 的onResume:变成和用户可交互 的,(在 activity 栈系统通过栈的方式管理这些
10、个Activity 的最上面,运行完弹出栈,则回到上一个Activity)onPause:到这一步是可见但不可交互 的,系统会停止动画 等消耗 CPU 的事情 从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候 你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 onResume 里读出来,注意:这个方法里做的事情时间要短,因为下一 个 activity 不会等到这个方法完成才启动onstop:变得不可见,被下一个 activity 覆盖了onDestroy:这是 activity 被干掉前最后一个被调用方法了,可能是外面类调用finish 方 法或者是系统为了节省空
11、间将它暂时性的干掉,可以用isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在 onDestroy 里 把他 cancel 掉,不然等线程结束的时候,调用 Dialog 的 cancel 方法会抛 异常的。onPause,onstop,onDestroy,三种状态 下 activity 都有可能被系统干掉为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库)。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还
12、是杀掉还是数据回滚,是吧?因为 Activity 可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是采用Android 的消息机制 Handler,Message来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。ller 改变了 View,View 会 从潜在的 Model 中获取数据来刷新自己。1010、让、让 ActivityActivity 变成一个窗口:变成一个窗口:ActivityActivity 属性设定属性设定讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很 简单你只需要设
13、置 一下 Activity 的主题就可以了在 AndroidManifest.xml 中定义 Activity 的地方一句话:Xml 代码1.android:theme=android:style/Theme.Dialog3.android:theme=android:style/Theme.Dialogandroid:theme=android:style/Theme.Dialogandroid:theme=android:style/Theme.Dialog这就使你的应用程序变成对话框的形式弹出来了,或者Xml 代码1.android:theme=android:style/Theme.T
14、ranslucent3.android:theme=android:style/Theme.Translucentandroid:theme=android:style/Theme.Translucentandroid:theme=android:style/Theme.Translucent就变成半透明的,友情提示-.-类似的这种 activity 的属性可以在 android.R.styleable 类的AndroidManifestActivity 方法中看到,AndroidManifest.xml 中所有元素的属性的介绍都可以参考这个类 android.R.styleable上面说的是
15、属性名称,具体有什么值是在 android.R.style 中 可以看到,比如这个android:style/Theme.Dialog 就对应于 android.R.style.Theme_Dialog,(_换成.-注意:这个是文章内容不是笑脸)就可以用在描述文件 中了,找找类定义和描述文件中的对应关系就都明白了。1111、你后台的你后台的 ActivityActivity 被系统回收怎么办:被系统回收怎么办:onSaveInstanceStateonSaveInstanceState当你的程序中某一个 Activity A 在运行时中,主动或被动地运行另一个新的Activity B 这个时候
16、 A 会执行Java 代码1.public2.void onSaveInstanceState(Bundle outState)3.super.onSaveInstanceState(outState);4.outState.putLong(id,1234567890);5.publicvoid onSaveInstanceState(Bundle outState)super.onSaveInstanceState(outState);outState.putLong(id,1234567890);B 完成以后又会来找 A,这个时候就有两种情况,一种是A 被回收,一种是没有被回收,被回 收的
17、 A 就要重新调用 onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数 savedInstanceState,没被收回的就还是onResume 就好了。savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在 onCreate()里你可能会用到它,如果正常启动onCreate 就不会有它,所以用的时候要判断一下是否为空。Java 代码1.if(savedInstanceState!=null)2.long id=savedInstanceState.getLong(id);3.if(savedInstanc
18、eState!=null)long id=savedInstanceState.getLong(id);就像官方的 Notepad 教程 里的情况,你正在编辑某一个 note,突然被中断,那么就把这个note 的 id 记住,再起来的时候就可以根据这个id 去把那个 note 取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦,没准你需要记住滚动条的位置.1212、调用与被调用:我们的通信使者调用与被调用:我们的通信使者 IntentIntent要说 Intent 了,Intent 就是这个这个意图,应用程序间Intent 进行交
19、流,打个电话啦,来个 电话啦都会发 Intent,这个是 Android 架构的松耦合的精髓部分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先:Java 代码1.Intent intent=new Intent();2.intent.setAction(Intent.ACTION_CALL);3.intent.setData(Uri.parse(tel:+number);4.startActivity(intent);Intent intent=new Intent();intent.setAction(Intent.ACTION_CALL);i
20、ntent.setData(Uri.parse(tel:+number);startActivity(intent);扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统只需要扔出intent 就好了,这个部分设计 地确实很好啊。那 Intent 通过什么来告诉系统需要谁来接受他呢?通常使用 Intent 有两种方法,第一种是直接说明需要哪一个类来接收代码如下:Java 代码1.Intent intent=new Intent(this,MyActivity.class);2.intent.getExtras().putString(id,
21、1);3.tartActivity(intent);Intent intent=new Intent(this,MyActivity.class);intent.getExtras().putString(id,1);tartActivity(intent);第一种方式很明显,直接指定了 MyActivity 为接受者,并且传了一些数据给 MyActivity,在MyActivity 里可以用 getIntent()来的到这个 intent 和数据。第二种就需要先看一下AndroidMenifest 中的 intentfilter 的配置了Xml 代码这里面配置用到了 action,data,
22、category 这些东西,那么聪明的你一定想到intent 里也会有这些东西,然后一匹配不就找到接收者了吗?action 其实就是一个意图的字符串名称。上面这段 intent-filter 的配置文件说明了这个 Activity 可以接受不同的 Action,当然相应的程序逻辑也不一样咯,提一下那个 mimeType,他是在 ContentProvider 里定义的,你要是自己实现一个 ContentProvider 就知道了,必须指定mimeType才能让数据被别人使用。不知道原理说明白没,总结一句,就是你调用别的界面不是直接 new 那个界面,而是通过扔出一个 intent,让系统帮你去
23、调用那个界面,这样就多么松藕合啊,而且符合了生命周期被系统管理的原则。想知道 category 都有啥,Android 为你预先定制好的 action 都有啥等等,请亲自访问官方链接 Intentps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的 logcat,每次运行一个程序的时候是不是有一些信息比如:Startingactivity:Intentaction=android.intent.action.MAINcategories=android.intent.category.LAUNCHERflags=0 x10200000comp=com.android.camera/com.android.camera.GalleryPicker 再对照一下 Intent 的一些 set 方法,就知道怎么调用咯,希望你喜欢:)