收藏 分享(赏)

2014年android面试题目及其答案大全new.doc

上传人:dzzj200808 文档编号:2638531 上传时间:2018-09-24 格式:DOC 页数:43 大小:172.50KB
下载 相关 举报
2014年android面试题目及其答案大全new.doc_第1页
第1页 / 共43页
2014年android面试题目及其答案大全new.doc_第2页
第2页 / 共43页
2014年android面试题目及其答案大全new.doc_第3页
第3页 / 共43页
2014年android面试题目及其答案大全new.doc_第4页
第4页 / 共43页
2014年android面试题目及其答案大全new.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、2014 面试题目及其答案1、 Android dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个概念 DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。 2、sim 卡的 EF 文件有何作用 sim 卡的文件系统有自己规范,主要是为了和手机通讯,sim 本 身可以有自己的操作系统,EF 就是作存储并和手机通讯用的 3、嵌入式操作系统内存管理有哪几种, 各有何特性 页式,段式,段页,用到了 MMU,虚拟空间等技术

2、4、 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? 嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。 5、一条最长的短信息约占多少 byte? 中文 70(包括标点),英文 160,160 个字节。 6、 android 中的动画

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

4、Queue(消息队列 )。 2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 Message Queue 里;或者接收 Looper 从 Message Queue 取出) 所送来的消息。 3) Message Queue(消息队列):用来存放线程放入的消息。 4)线程:UI thread 通常就是 main thread,而 Android 启动程序时会替它建立一个Message Queue。 8、说说 mvc 模式的原理,它在 android 中的运用 MVC(Model_view_contraller)”模型_视图_控制器”。 MV

5、C 应用程序总是由这三个部分组成。Event(事件) 导致 Controller 改变 Model 或 View,或者同时改变两者。只要 Controller改变了 Models 的数据或者属性,所有依赖的 View 都会自动更新。类似的,只要 Contro 9、Activity 的生命周期 和其他手机 平台 的应用 程序 一样,Android 的应用程序 的生命周期是被统一掌控 的,也 就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习 并 适应它。 简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话 发进来短信 ,或者没有电了,这时候程

6、序都会被中断,优先去服务电话的基本功能 ,另 外系统也不允许你占用太多资源 ,至少要保证电话功能吧, 所以资源不足的时候也就有可 能被干掉。 言归正传,Activity 的基本生命周期如下代码 所示: Java 代码 public class MyActivity extends Activity protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onResume(); protected void onPause(); protected void onSt

7、op(); protected void onDestroy(); 你自己写的 Activity 会按需要 重载这些方法,onCreate 是免不了的,在一个 Activity正常启动的过程中,他们被调用的顺序是 onCreate - onStart - onResume, 在 Activity被干掉的时候顺序是 onPause - onStop - onDestroy ,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个 Activity 是全屏的那么:onPause-onStop ,恢复的时候 onStart-onResum

8、e ,如果打断 这个应用程序的是一个 Theme 为 Translucent 或者 Dialog 的 Activity 那么只是 onPause ,恢复 的时候 onResume 。 详细介绍一下这几个方法中系统在做什么以及我们应该做什么: onCreate: 在这里创建界面 ,做一些数据 的初始化工作 onStart: 到这一步变成用户可见不可交互 的 onResume: 变成和用户可交互 的,(在 activity 栈系统通过栈的方式管理这些个 Activity 的最上面,运行完弹出栈,则回到上一个 Activity) onPause: 到这一步是可见但不可交互 的,系统会停止动画 等消耗

9、 CPU 的事情 从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候 你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 onResume 里读出来,注意:这个方法里做的事情时间要短,因为下一 个 activity 不会等到这个方法完成才启动 onstop: 变得不可见 ,被下一个 activity 覆盖了 onDestroy: 这是 activity 被干掉前最后一个被调用方法了,可能是外面类调用 finish方 法或者是系统为了节省空间将它暂时性的干掉,可以用 isFinishing()来判断它,如果你有一个 Progress Dialog 在线程中转动,请在 o

10、nDestroy 里 把他 cancel 掉,不然等线程结束的时候,调用 Dialog 的 cancel 方法会抛 异常的。 onPause, onstop, onDestroy,三种状态 下 activity 都有可能被系统干掉 为了保证程序的正确性,你要在 onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?因为 Activity 可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一

11、般我都是采用 Android 的消息机制 Handler,Message来处理多线程和界面交互的问题。这个我后面会讲一些,最近因为这些东西头已经很大了,等我理清思绪再跟大家分享。 ller 改变了 View,View 会 从潜在的 Model 中获取数据来刷新自己。 10、让 Activity 变成一个窗口: Activity 属性设定 讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很 简单你只需要设置 一下 Activity 的主题就可以了在 AndroidManifest.xml 中定义 Activity 的 地方一句话: Xml 代码 1. android

12、:theme=“android:style/Theme.Dialog“ 这就使你的应用程序变成对话框的形式弹出来了,或者 Xml 代码 1. android:theme=“android:style/Theme.Translucent“ 就变成半透明的,友情提示 -.-类似的这种 activity 的属性可以在 android.R.styleable 类的 AndroidManifestActivity 方法中看到,AndroidManifest.xml 中所有元素的属性的介绍都可以参考这个类 android.R.styleable 上面说的是属性名称,具体有什么值是在 android.R.s

13、tyle 中 可以看到,比如这个“android:style/Theme.Dialog“ 就对应于 android.R.style.Theme_Dialog ,(_换成. 这里面配置用到了 action, data, category 这些东西,那么聪明的你一定想到 intent 里也会有这些东西,然后一匹配不就找到接收者了吗? action 其实就是一个意图的字符串名称。 上面这段 intent-filter 的配置文件说明了这个 Activity 可以接受不同的 Action,当然相应的程序逻辑也不一样咯,提一下那个 mimeType,他是在 ContentProvider 里定义的,你要

14、是自己实现一个 ContentProvider 就知道了,必须指定 mimeType 才能让数据被别人使用。 不知道原理说明白没,总结一句,就是你调用别的界面不是直接 new 那个界面,而是通过扔出一个 intent,让系统帮你去调用那个界面,这样就多么松藕合啊,而且符合了生命周期被系统管理的原则。 想知道 category 都有啥,Android 为你预先定制好的 action 都有啥等等,请亲自访问官方链接 Intent ps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的 logcat,每次运行一个程序的时候是不是有一些信息比如: Starting activity: Intent

15、 action=android.intent.action.MAINcategories=android.intent.category.LAUNCHER flags=0x10200000comp=com.android.camera/com.android.camera.GalleryPicker 再对照一下 Intent 的一些 set 方法,就知道怎么调用咯,希望你喜欢:) 13、什么是 ANR 如何避免它? 答:ANR:Application Not Responding,五秒 在 Android 中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,And

16、roid 就会显示 ANR 对话框了: 对输入事件(如按键、触摸屏事件 )的响应超过 5 秒 意向接受器(intentReceiver)超过 10 秒钟仍未执行完毕 Android 应用程序完全运行在一个独立的线程中( 例如 main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。 因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如 onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库

17、;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作) 。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 - 也不需要调用 Therad.wait()或者 Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看 Snake 的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5 秒钟不被处理而产生的 ANR。这种实践需要应用到所有显示用户界面的线程,因为他们

18、都面临着同样的超时问题。 14、什么情况会导致 Force Close ?如何避免? 能否捕获导致其的异常? 答:一般像空指针啊,可以看起 logcat,然后对应到程序中 来解决错误 15、Android 本身的 api 并未声明会抛出异常,则其在运行时有无可能抛出 runtime 异常,你遇到过吗?诺有的话会导致什么问题 ?如何解决? 答:会,如 nullpointerException,textView 没有初始化时,却调用了其方法。打开控制台,查看 logcat 找出异常并修改。16、简要解释一下 activity、 intent 、intent filter、service、Broad

19、case、BroadcaseReceiver 答:一个 activity 呈现了一个用户可以操作的可视化用户界面 一个 service 不包含可见的用户界面,而是在后台无限地运行 可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信 一个 broadcast receiver 是一个接收广播消息并作出回应的 component,broadcast receiver 没有界面 intent:content provider 在接收到 ContentResolver 的请求时被激活。 activity, service 和 broadcast receiver 是被称为

20、 intents 的异步消息激活的。 一个 intent 是一个 Intent 对象,它保存了消息的内容。对于 activity 和 service 来说,它指定了请求的操作名称和待操作数据的 URI Intent 对象可以显式的指定一个目标 component。如果这样的话, android 会找到这个 component(基于 manifest 文件中的声明)并激活它。但如果一个目标不是显式指定的,android 必须找到响应 intent 的最佳 component。 它是通过将 Intent 对象和目标的 intent filter 相比较来完成这一工作的。一个component 的

21、intent filter 告诉 android 该 component 能处理的 intent。intent filter 也是在 manifest 文件中声明的。 17、IntentService 有何优点 ? 答:IntentService 的好处 * Acitivity 的进程,当处理 Intent 的时候,会产生一个对应的 Service * Android 的进程处理器现在会尽可能的不 kill 掉你 * 非常容易使用 18、横竖屏切换时候 activity 的生命周期? 1、不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,

22、切横屏时会执行一次,切竖屏时会执行两次 2、设置 Activity 的 android:configChanges=“orientation“时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次 3、设置 Activity 的 android:configChanges=“orientation|keyboardHidden“时,切屏不会重新调用各个生命周期,只会执行 onConfigurationChanged 方法 19. 如何将 SQLite 数据库(dictionary.db 文件)与 apk 文件一起发布? 解答:可以将 dictionary.db 文件复制到 Eclipse

23、 Android 工程中的 res aw 目录中。所有在 res aw 目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db 文件复制到 res aw 目录中 20. 如何将打开 res aw 目录中的数据库文件? 解答:在 Android 中不能直接打开 res aw 目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或 SD 卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用 getResources().openRawResource 方法获得 res aw 目录中资源的 InputStream 对象,然后将该 InputSt

24、ream 对象中的数据写入其他的目录中相应文件中。在 Android SDK 中可以使用 SQLiteDatabase.openOrCreateDatabase 方法来打开任意目录中的 SQLite 数据库文件。 21. Android 引入广播机制的用意? 答:a:从 MVC 的角度考虑 (应用程序内) 其实回答这个问题的时候还可以这样问,android 为什么要有那 4 大组件,现在的移动开发模型基本上也是照搬的 web 那一套 MVC 架构,只不过是改了点嫁妆而已。android 的四大组件本质上就是为了实现移动或者说嵌入式设备上的 MVC 架构,它们之间有时候是一种相互依存的关系,有时

25、候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。 b:程序间互通消息(例如在自己的应用程序内监听系统来电) c:效率上(参考 UDP 的广播协议在局域网的方便性) d:设计模式上(反转控制的一种应用,类似监听者模式)1. 请描述下 Activity 的声明周期。onCreate-onStart-onRemuse-onPause-onStop-onRestart-onDestroy2. 如果后台的 Activity 由于某种原因被系统回收,如何在回收之前保存当前状态。onSaveInstanceState().程序中的某一个 Activity A 在运行时,主动或被动的运行另一

26、个新的 Activity B,这个时候A 会执行 onSaveInstanceState()。B 完成以后又回来找 A,这个时候有两种情况:一是 A 被回收,二是 A 没有被回收,被回收的 A 就要重新调用 onCreate()方法,不同于直接启动的是这回 onCreate()里是带上了参数 savedInstanceState;而没被回收的就直接执行 onResume(),跳过 onCreate()。 3. 如何将一个 Activity 设置成窗口样式。在 AndroidManifext.xml 中 Activity 定义处添加android:theme=“android:style/The

27、me.Dialog“ 或android:theme=“android:style/Theme.Translucent“。 4. 如何退出 Activity?如何安全退出已调用多个 Activity 的 Application?1.Activity.finish();也可以用 killProcess()和 System.exit()这样的方法2.用 ActivityManager 的 restartPackage 方法5. 请介绍下 android 大众常用的五种布局。FrameLayout(框架布局)只可以有一个控件,并且不能设计这个控件的位置,控件会放在左上角LinearLayout(线性布

28、局)一行只能控制一个控件的线性布局,所以当有很多控件需要在一个界面中列出时,可以用LinearLayout 布局AbsoluteLayout(绝对布局)可以放置多个控件,并且可以自己定义控件的 x,y 的位置RelativeLayout(相对布局)比如要在一行上显示多个控件,这时就要用到相对布局TableLayout(表格布局)将子元素的位置分配到行或列中,一个 TableLayout 由许多的 TableRow 组成6. 请介绍下 android 的数据存储方式。SharedPreferences 方式用来存储”key-value paires”格式的数据,它是一个轻量级的键值存储机制,只可

29、以存储基本数据类型,可以通过它保存一些上次用户所做的修改操作文件存储方式它通过 FileInputStream 和 FileOutputStream 对文件进行操作。但是在 Android 中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件,如果要共享数据就用Content ProvidersSQLite 数据库方式Android 提供的一个标准的数据库,支持 SQL 语句内容提供器(Content provider)方式是所有应用程序之间数据存储和检索的桥梁,它的作用是使得各个应用程序之间实现数据共享网络存储方式通过网络来存储和获取数据7。请介绍下 ContentProvi

30、der 是如何实现数据共享的。Android 提供了 ContentProvider,一个程序可以通过实现一个 ContentProvider 的抽象接口将自己的数据完全暴露出去,而且 ContentProviders 是以类似数据库中表的方式将数据暴露,也就是说 ContentProvider 就像一个“数据库” 。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用 URI 来表示外界需要访问的“数据库”。外部访问通过 ContentResolver 去访问并操作这些被暴露的数据。8。如何启用 Service,如何停用 Service。Intent inten

31、t = new Intent();intent.setClass(this,cba.class);startService(intent);stopService(intent);9。注册广播有几种方式,这些方式有何优缺点?Android 引入广播机制的用意。2 种方式1. 在 androidmainfest.xml 中注册 2. 3. 4. 5. 6. 7. 缺点:常驻型,占资源比较大8.9. registerReceiver(receiver,filter); BroadcastReceiver 更新 UI 一般用这种方法10. 请解释下在单线程模型中 Message,Handler,Me

32、ssage Queue,Looper 之间的关系。MessageMessage 消息,理解为线程间交流的信息,处理数据后台线程需要更新 UI,则发送Message 内含一些数据给 UI 线程。2. HandlerHandler 处理者,是 Message 的主要处理者,负责 Message 的发送,Message 内容的执行处理。后台线程就是通过传进来的 Handler 对象引用来 sendMessage(Message)。而使用Handler,需要 implement 该类的 handleMessage(Message)方法,它是处理这些 Message 的操作内容,例如 Update UI

33、。通常需要子类化 Handler 来实现 handleMessage 方法。Message QueueMessage Queue 消息队列,用来存放通过 Handler 发布的消息,按照先进先出执行。每个 message queue 都会有一个对应的 Handler。Handler 会向 message queue 通过两种方法发送消息:sendMessage 或 post。这两种消息都会插在 message queue 队尾并按先进先出执行。但通过这两种方法发送的消息执行的方式略有不同:通过 sendMessage 发送的是一个 message 对象,会被 Handler 的 handleM

34、essage()函数处理;而通过 post 方法发送的是一个 runnable 对象,则会自己执行。4. LooperLooper 是每条线程里的 Message Queue 的管家。Android 没有 Global 的 Message Queue,而 Android 会自动替主线程(UI 线程)建立 Message Queue,但在子线程里并没有建立 Message Queue。所以调用 Looper.getMainLooper()得到的主线程的 Looper 不为 NULL,但调用 Looper.myLooper() 得到当前线程的 Looper 就有可能为 NULL。对于子线程使用 L

35、ooper,API Doc 提供了正确的使用方法:11. AIDL 的全程是什么?如何工作?能处理哪些类型的数据?AIDL 的英文全称是 Android Interface Define Language当 A 进程要去调用 B 进程中的 service 时,并实现通信,我们通常都是通过 AIDL 来操作的A 工程:首先我们在 net.blogjava.mobile.aidlservice 包中创建一个 RemoteService.aidl 文件,在里面我们自定义一个接口,含有方法 get。ADT 插件会在 gen 目录下自动生成一个RemoteService.java 文件,该类中含有一个名

36、为 RemoteService.stub 的内部类,该内部类中含有 aidl 文件接口的 get 方法。说明一:aidl 文件的位置不固定,可以任意然后定义自己的 MyService 类,在 MyService 类中自定义一个内部类去继承RemoteService.stub 这个内部类,实现 get 方法。在 onBind 方法中返回这个内部类的对象,系统会自动将这个对象封装成 IBinder 对象,传递给他的调用者。其次需要在 AndroidManifest.xml 文件中配置 MyService 类,代码如下:为什么要指定调用 AIDL 服务的 ID,就是要告诉外界 MyService 这

37、个类能够被别的进程访问,只要别的进程知道这个 ID,正是有了这个 ID,B 工程才能找到 A 工程实现通信。说明:AIDL 并不需要权限B 工程:首先我们要将 A 工程中生成的 RemoteService.java 文件拷贝到 B 工程中,在bindService 方法中绑定 aidl 服务绑定 AIDL 服务就是将 RemoteService 的 ID 作为 intent 的 action 参数。说明:如果我们单独将 RemoteService.aidl 文件放在一个包里,那个在我们将 gen 目录下的该包拷贝到 B 工程中。如果我们将 RemoteService.aidl 文件和我们的其他

38、类存放在一起,那么我们在 B 工程中就要建立相应的包,以保证 RmoteService.java 文件的报名正确,我们不能修改 RemoteService.java 文件bindService(new Inten(“net.blogjava.mobile.aidlservice.RemoteService“), serviceConnection, Context.BIND_AUTO_CREATE); ServiceConnection 的 onServiceConnected(ComponentName name, IBinder service)方法中的 service 参数就是 A 工程

39、中 MyService 类中继承了 RemoteService.stub 类的内部类的对象。Android 采用 RPC 的方式来实现(remote procedure call)远程通信,并且 Android 通过接口定义语言 AIDL 来生成两个进程之间互相访问的代码。例如,你在 Activity 里的代码需要访问 Service 中的一个方法,那么就可以通过这种方法来实现了。? 创建一个 AIDL 文件(参见代码)? 实现 AIDL 文件生成的 Java 接口(参见代码)? 将你的接口暴露给客户端? 客户端调用12. 请解释下 Android 程序运行时权限与文件系统权限的区别。Andr

40、oid 程序运行 是虚拟机 Dalvik( android 授权) 文件系统 是 linux 内核 授权13. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?Intent intent =newIntent(); intent.setAction(“android.intent.action.VIEW“); Uri content_url =Uri.parse(“http:/“); intent.setData(content_url); intent.setClassName(“com.android.browser“,“com.android.browser.BrowserActi

41、vity“); startActivity(intent);14. 有一个一维整型数组 int data 保存的是一张宽为 width,高为 height 的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为 50%。答:像素数组 intdata 里就是一个个像素的颜色值,你循环和 0xffffffff 比较,如果相等,那么就把这个值换成 0x88ffffff 就行了,这样像素数组里所有的白色不透明(0xffffffff)都变成的半透明15. 你如何评价 Android 系统?优缺点。优点:开源特性,得到众多厂商支持。软件发展很快。界面 UI,系

42、统优化不错。缺点:版本过多,升级过快。用户体验不一致。16. android 中的动画有哪几类,他们的特点和区别是什么?两种,一种是 Tween 动画(补间动画) ,一种是 Frame 动画 (逐帧动画)。Tween 动画:使试图组件移动,放大,缩小以及产生透明度的变化。Frame 动画:传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。17. 横竖屏切换时 activity 的生命周期不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。设置 Activity 的 android:confi

43、gChanges=“orientation“时,切横,竖屏时生命周期只会执行一次。设置 Activity 的 android:configChanges=“orientation|keyboardHidden“时,切屏不会重新调用声明周期,只会执行 onConfigurationChanged 方法。进程与线程当一个程序开始运行时,它就是一个进程,进程包含运行中的程序和程序所使用的内存和系统资源。而一个进程又是由多个线程组成的。引入线程优点是易于调度,提供开发效率,通过线程可以方便有效的实现并发,进程可创建多个线程来执行同一个程序的不同部分,开销小,创建线程比创建进程要快,所需开销很少。宏就是

44、把一系列常用的操作作为一个整体,保存起来,以后用的时候直接通过一定方式用就是了先说宏和函数的区别:1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换 ),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.4. 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信

45、息传递,形参作为函数的局部变量,显然是占用内存的.5. 函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.定义一个宏替代两个输入数的乘积怎么写?#include#define MULTIPLY(x,y) (x)*(y)int main()int x,y,z;scanf(“%d%d“,z=MULTIPLY(x,y);printf(“%d“,z);return 0;-Android 面试题 经典1、 Android dvm 的进程和 Linux 的进程, 应用程序的进程是否为同一个

46、概念DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。2、sim 卡的 EF 文件有何作用sim 卡的文件系统有自己规范,主要是为了和手机通讯,sim 本 身可以有自己的操作系统,EF 就是作存储并和手机通讯用的3、嵌入式操作系统内存管理有哪几种, 各有何特性页式,段式,段页,用到了 MMU,虚拟空间等技术4、 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?嵌入式实时操作系统是指当外界事件或数据产生时,能

47、够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于 linux 内核的,因此属于软实时。5、一条最长的短信息约占多少 byte?中文 70(包括标点),英文 160,160 个字节。6、 android 中的动画有哪几类,它们的特点和区别是什么?两种,一种是 Tween 动画、还有一种是 Frame 动画。Tween 动画,这种实现方式可以使视图组

48、件移动、放大、缩小以及产生透明度的变化;另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。7、handler 机制的原理andriod 提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper 类用来管理特定线程内对象之间的消息交换(Message Exchange)。1)Looper: 一个线程可以产生一个 Looper 对象,由它来管理此线程里的 Message Queue(消息队列)。2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 Message

49、Queue 里;或者接收 Looper 从 Message Queue 取出) 所送来的消息。3) Message Queue(消息队列):用来存放线程放入的消息。4)线程:UI thread 通常就是 main thread,而 Android 启动程序时会替它建立一个Message Queue。8、说说 mvc 模式的原理,它在 android 中的运用android 的官方建议应用程序的开发采用 mvc 模式。何谓 mvc?mvc 是 model,view,controller 的缩写,mvc 包含三个部分:l 模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。l 视图(view )对象:是应用程序中负责生成用户界面的部分。也是在整个 mvc 架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。l 控制器(control)对象:是根据用户的输入,控制用户界面数据显

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报