您的位置:首页 > 移动开发 > Android开发

【Android学习系列】Android 知识点集结

2012-09-14 15:41 162 查看
同事说去要面试一个android开发,让我给他讲讲,觉得自己实在没什么好讲的,自身水平也是一般般,讲不出那么多道道来,于是去网上搜集了一些android的面试题看了下,顺便自己也对android的知识点进行一下总结。

1. activity 的生命周期

打开应用时先后执行了onCreate()->onStart()->onResume三个方法;

按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法;

按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法,这时候应用程序并没有销毁;

再次启动ActivityDemo应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法;

网上有种说法,当一个EditField在输入一些字符后,按住home键,退回到home screen,再进去的时候,EditField的内容已经不在了;

---在4.0.4的系统下测试,内容还是存在的,无需做额外的保存操作。 那么什么时候要保存数据呢?

【横竖屏时的生命周期】

1. 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏时会执行两次;

【笔者注】在4.0.4系统下测试,横竖屏的切换都会先销毁原先的屏幕,再创建新的屏幕。即:onPause()->onStop()->onDestory(),再onCreate()->onStart()->onResume;

2. 设置 Activity 的 android:configChanges=”orientation” 时 , 切屏还是会重新调用各个生命周期 , 切横、竖屏时只会执行一次;

3. 设置 Activity 的 android:configChanges=”orientation|keyboardHidden” 时 , 切屏不会重新调用各个生命周期 , 只会执行 onConfigurationChanged 方法;

【笔者注】网上很多资料关于配置configChanges时,可以防止屏幕切换而销毁,但在4.0.4中测试失败。-----????????????

失败原因是:配置信息中要 "|screenSize"不然,这个属性不会生效(SDK 13以上的版本)。太坑爹了。。。

http://www.cnblogs.com/zhangkai281/articles/2099264.html

2.android 中的动画有哪几类,它们的特点和区别是什么 ?

两种,一种是 Tween 动画、还有一种是 Frame 动画。 Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化 ; 另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

3. 一条最长的短信息约占多少 byte?

中文70( 包括标点) ,英文160 ,160 个字节。

4.handler 机制的原理

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 thread 通常就是 main thread ,而 Android 启动程序时会替它建立一个 Message Queue 。



5. 什么是嵌入式实时操作系统 , Android 操作系统属于实时操作系统吗 ?


嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而 android 是基于linux 内核的,因此属于软实时。



6.android 中线程与线程,进程与进程之间如何通信


1 、一个 Android 程序开始运行时,会单独启动一个 Process 。

默认情况下,所有这个程序中的 Activity 或者 Service 都会跑在这个 Process 。

默认情况下,一个 Android 程序也只有一个 Process ,但一个 Process 下却可以有许多个 Thread。

2 、一个 Android 程序开始运行时,就有一个主线程 Main Thread 被创建。该线程主要负责 UI 界面的显示、更新和控件交互,所以又叫 UI Thread 。

一个 Android 程序创建之初,一个 Process 呈现的是单线程模型 — 即 Main Thread ,所有的任务都在一个线程中运行。所以, Main Thread 所调用的每一个函数,其耗时应该越短越好。而对于比较费时的工作,应该设法交给子线程去做,以避免阻塞主线程(主线程被阻塞,会导致程序假死 现象)。

3 、 Android 单线程模型: Android UI 操作并不是线程安全的并且这些操作必须在 UI 线程中执行。如果在子线程中直接修改 UI ,会导致异常。

7.Android dvm 的进程和 Linux 的进程 , 应用程序的进程是否为同一个概念

DVM 指 dalivk 的虚拟机。每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟机实例。而每一个 DVM 都是在 Linux 中的一个进程,所以说可以认为是同一个概念。

8.sim 卡的 EF 文件有何作用

sim 卡的文件系统有自己规范,主要是为了和手机通讯, sim 本 身可以有自己的操作系统,EF 就是作存储并和手机通讯用的

SIM卡里的所有文件按树来组织:

主文件MF(Master File)——每一块SIM卡只有一个唯一的主文件, 其他所有文件都是它的子孙, 主文件只有文件头,里面存放着整个SIM卡的控制和管理信息

专用文件DF(Dedicated File)——也是只有一个文件头, 里面存放着整个目录的管理控制信息, 专用文件相当于一个目录的根.

基本文件EF(Elementary File)——既有文件头,也有文件体, 文件头存放该文件的位置和控制信息, 文件体存放真正的数据, 整个SIM卡中只有基本文件有文件体, 也只有基本文件才用来存放数据.

参考资料:http://blog.csdn.net/bossdarcy/article/details/7081494

9. 让 Activity 变成一个窗口: Activity 属性设定

讲点轻松的吧 , 可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很 简单你只需要设置 一下 Activity 的主题就可以了在 AndroidManifest.xml 中定义 Activity 的 地方一句话:

Xml 代码

1. android :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.style 中 可以看到,比如这个”@android:style/Theme.Dialog” 就对应于 android.R.style.Theme_Dialog ,(‘_’ 换成 ‘.’ < — 注意:这个是文章内容不是笑脸 ) 就可以用在描述文件 中了 , 找找类定义和描述文件中的对应关系就都明白了。

10. 如何将 SQLite 数据库 (dictionary.db 文件 ) 与 apk 文件一起发布 ?

解答:可以将 dictionary.db 文件复制到 Eclipse Android 工程中的 raw 目录中。所有在 raw 目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将 dictionary.db 文件复制到 raw目录中;

【笔者注】res文件中,各个文件夹有各自个属性要求

11. 如何将打开 res aw 目录中的数据库文件 ?

解答:在 Android 中不能直接打开 res aw 目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或 SD 卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource 方法获得 res aw 目录中资源的 InputStream 对象,然后将该InputStream 对象中的数据写入其他的目录中相应文件中。在 Android SDK 中可以使用SQLiteDatabase.openOrCreateDatabase 方法来打开任意目录中的
SQLite 数据库文件。



12. 在 android 中 mvc 的具体体现


MVC 是 Model,View,Controller 的缩写,从上图可以看出 MVC 包含三个部分:

.. 模型( Model )对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。

.. 视图( View )对象:是应用程序中负责生成用户界面的部分。也是在整个MVC 架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

.. 控制器( 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 里面处理,当然对业务计算等操作也是必须放在的该层的。

13. SDK升级后,编译出现错误

[2012-12-13 17:42:51 - ANDROID_3.0-mc] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

解决: Android Tools > Fix Project Properties.
http://www.mianwww.com/html/2012/04/15635.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: