CVTE面试题电子教案

上传人:go****e 文档编号:137374810 上传时间:2020-07-07 格式:DOCX 页数:20 大小:54.46KB
返回 下载 相关 举报
CVTE面试题电子教案_第1页
第1页 / 共20页
CVTE面试题电子教案_第2页
第2页 / 共20页
CVTE面试题电子教案_第3页
第3页 / 共20页
CVTE面试题电子教案_第4页
第4页 / 共20页
CVTE面试题电子教案_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《CVTE面试题电子教案》由会员分享,可在线阅读,更多相关《CVTE面试题电子教案(20页珍藏版)》请在金锄头文库上搜索。

1、CVTE面试题精品文档Android 运行环境主要指的虚拟机技术Dalvik。Android中的所有Java程序都是运行在Dalvik VM上的。Android上的每个程序都有自己的线程,DVM只执行.dex的Dalvik executable 文件。每个Android应用在底层都对应有一个独立的DVM实例并在其解释下执行。 虽然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode ),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,Java把类编译成一个或多个.c

2、lass byte code 文件,然后打包到jar中,JVM会从中jar文件中获得相应的.class文件和JRE字节码。 Android VM虽然也是是用Java语言进行编程, Java程序通过编译后,还需要通过SDK中的dex工具转化成.dex格式,DVM再从其中读取指令和数据。 每一个应用程序即一个进程(Linux的一个Process)。二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。 DVM非常适合在移动终端上使用

3、,与PC相比,它不需要很快的CPU和大量的内存空间. Google的测算显示,64MB的内存已经能让系统正常运转了。其中24MB被用于底层系统的初始化和启动。另外20MB被用于启动高层服务。DVM有如下特征: 使用专有的.dex格式。原因是java类文件在编译过后,会产生至少一个.class文件包含大量陈余信息,dex文件格式会把所有的.class文件内容整合到一个.dex文件中。即减少了整体文件的尺寸和IO操作,也提高了类的查找速度。增加了对新的操作码的支持文件结构尽量简洁,使用等长的指令,借以提高解析速度。尽量扩大只读结构的大小,借以提高跨进程的数据共享。dex的优化,dex文件的结构是紧

4、凑的,但是如果想提高运行时的性能,就需要对dex文件进行进一步的优化,这些优化针对以下几个方面:验证dex文件中的所有类对一些特定的类和方法里面的操作码进行优化调整所有的字节序(Little_endian)和对齐结构中的每一个域基于寄存器,基于寄存器的虚拟机虽然比基于堆栈的虚拟机在硬件,通用性上要差一些,但是它的代码执行效率去更好每一个Android应用都运行在它自己的DVM实例中,每一个DVM实例都是一个独立的进程空间。所有的Android应用的线程都对应一个Linux线程,DVM因此可以更多地依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,不同的应用都是用不同的Linu

5、x用户来运行以最大程度地保户应用程序的安全性和独立性 http:/ android中的动画有哪几类,它们的特点和区别是什么?两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。7、handler机制的原理andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。1)Looper: 一个线程可以产生一

6、个Looper对象,由它来管理此线程里的Message Queue(消息队列)。2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。3) Message Queue(消息队列):用来存放线程放入的消息。4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue19. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。 简单的说,Han

7、dler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理18. 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。android中,不同进程之间传递信息要用到广播,可以有两种方式来实现。 第一种方式:在Manifest.xml中注册广播,是一种比较推荐的方法,因为它不需要手动注销广播(如果广播未注销,程序退出时可能会出错)。 具体实现在Manifest的application中添加:上面两个android:name分别是广播名和广播的动作(这里的动

8、作是表示系统启动完成),如果要自己发送一个广播,在代码中为:Intent i = new Intent(“android.intent.action.BOOT_COMPLETED”);sendBroadcast(i);这样,广播就发出去了,然后是接收。 接收可以新建一个类,继承至BroadcastReceiver,也可以建一个BroadcastReceiver的实例,然后得写onReceive方法,实现如下:protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() Override public void onRece

9、ive(Context context, Intent intent) String action = intent.getAction(); if (action.equals(“android.intent.action.BOOT_COMPLETED”) /Do something ;第二种方式,直接在代码中实现,但需要手动注册注销,实现如下:IntentFilter filter = new IntentFilter(); filter.addAction(“android.intent.action.BOOT_COMPLETED”);registerReceiver(mEvtRecei

10、ver, filter); /这时注册了一个recevier ,名为mEvtReceiver,然后同样用上面的方法以重写onReceiver, 最后在程序的onDestroy中要注销广播,实现如下:Override public void onDestroy() super.onDestroy(); unregisterReceiver(mPlayerEvtReceiver); Android系统中的广播是广泛用于应用程序之间通信的一种手段,它类似于事件处理机制,不同的地方就是广播的处理是系统级别的事件处理过程(一般事件处理是控件级别的)。在此过程中仍然是离不开Intent对象,理解广播事件的

11、处理过程,灵活运用广播处理机制,在关键之处往往能实现特别的效果, 在Android 中如果要发送一个广播必须使用sendBroadCast 向系统发送对其感兴趣的广播接收器中。 使用广播必须要有一个intent 对象必设置其action动作对象 使用广播必须在配置文件中显式的指明该广播对象 每次接收广播都会重新生成一个接收广播的对象 在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理34、android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开

12、发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方 式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存 中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处 理比较好,类似SAX方式,同样很节省内存,在J2ME中我们经常使用的KXML库来解析。android中的动画有哪几类,它们的特点和区别是什么? 两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可

13、以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。言归正传,Activity的基本生命周期如下代码所示: Java 代码 ? 1 2 3 4 public class MyActivity extends Activity protected void onCreate(Bu

14、ndle savedInstanceState); protected void onStart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); 你自己写的Activity会按需要 重 载这些方法,onCreate是免不了的,在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate - onStart -onResume, 在Activity被干掉的时候顺序是onPause - onStop - onDes

15、troy ,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause-onStop ,恢复的时候onStart-onResume ,如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复 的时候onResume 。详细介绍一下这几个方法中系统在做什么以及我们应该做什么: onCreate: 在这里创建界面,做一些数据的初始化工作 onStart: 到这一步变成用户可见不可交互的 onResume: 变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity) onPause: 到 这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activit

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号