Android面试精华

SIM卡的EF文件有什么作用?

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

主文件MF(Master File)——主文件只有文件头,里面存放着整个SIM卡的控制和管理信息

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

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

一条短信最长约占多少byte?

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

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。

mvc模式的原理,在android中的应用?

目的:降低耦合性,使组件重复利用

mvc是model,view,controller的缩写,mvc包含三个部分:

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

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

  控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。

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

如何让Activity变成一个窗口?

在AndroidManifest.xml 中定义 Activity的属性:android :theme="@android:style/Theme.Dialog"

后台的Activity被系统回收怎么办?

当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B 这个时候A会执行

public void onSaveInstanceState(Bundle outState) {
   super.onSaveInstanceState(outState);
    outState.putLong("id", 123456);
}

B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上参数savedInstanceState,没被收回的就还是onResume就好了.

if(savedInstanceState != null){
    long id = savedInstanceState.getLong("id");}

Intent的作用

如何退出Activity?如何安全退出已调用多个Activity的Application?

对于单一Activity的应用来说,退出很简单,直接finish()即可。

当然,也可以用killProcess()和System.exit()这样的方法。

Android的数据存储方式

1、使用SharedPreferences存储数据;

2、文件存储数据;

3、SQLite数据库存储数据;

4、使用ContentProvider存储数据;

5、网络存储数据;

Android常用的布局

线性/相对/绝对/网格/表格/帧布局

Android的多屏幕适配

a.在manifest里定义你的程序支持的屏幕类型,相应代码如下:

<supports-screens android:resizeable=["true"| "false"]

android:smallScreens=["true" | "false"] //是否支持小屏

android:normalScreens=["true" | "false"] //是否支持中屏

android:largeScreens=["true" | "false"] //是否支持大屏

android:xlargeScreens=["true" | "false"] //是否支持超大屏

android:anyDensity=["true" | "false"] //是否支持多种不同密度的屏幕

android:requiresSmallestWidthDp=”integer”

android:compatibleWidthLimitDp=”integer”

android:largestWidthLimitDp=”integer”/>

b.对不同大小的屏幕提供不同的layout。

比如,如果需要对大小为large的屏幕提供支持,需要在res目录下新建一个文件夹layout-large/并提供layout。当然,也可以在res
目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

c.对不同密度的屏幕提供不同的图片。

应尽量使用点9格式的图片,如需对密度为low的屏幕提供合适的图片,需新建文件夹drawable-ldpi/,并放入合适大小的图片。
相应的,medium对应drawable-mdpi /,high对应drawable-hdpi/,extra high对应drawable-xhdpi/。

图片大小的确定:low:medium:high:extra high比例为3:4:6:8。举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×
48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra high为96×96。

ContentProvider是如何实现数据共享的?

一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数据库中
表的方式将数据暴露。Content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享
数据的方法。

要想使应用程序的数据公开化,可通过2种方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的
Content provider中,前提是有相同数据类型并且有写入Content provider的权限。

注册广播有几种方式?有何优缺点?

静态注册:常驻型,占资源比较大

动态注册:优先级比较高,广播跟随程序的生命周期

有哪些方法可以实现前后台的数据交换,包括文字和图片?

有哪些方法实现消息的推送?

轮询 : 应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信

SMS :(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是很难找到免费的网关来发送短信

持久连接 : 主要是Socket通讯,这个解决了性能问题,但是耗电问题依旧没能解决

网络通信的方式

TCP/URL(URLConnection)/HTTP(HttpClient)/WebView/WebService

Activity启动模式

1. standard

模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。

2. singleTop

如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实
例,只要不在栈顶,都会创建实例)。

3. singleTask

如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面
的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

4. singleInstance

在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任
何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同
一个应用中。

NDK是什么

NDK是一些列工具的集合,

NDK提供了一系列的工具,帮助开发者迅速的开发C/C++的动态库,并能自动将so和java 应用打成apk包。

NDK集成了交叉编译器,并提供了相应的mk文件和隔离cpu、平台等的差异,开发人员只需简单的修改mk文件就可以创建出so

描述一下android的系统架构

android系统架构分从下往上为linux 内核层、运行库、应用程序框架层、和应用程序层

linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

  libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android网页浏览器的运行,例如标准的c函数库libc、openssl、sqlite等,当然也包括支持游戏开发2dsgl和 3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等众多的多媒体文件格式。android的runtime负责解释和执行生成的dalvik格式的字节码。

  applicationframework(应用软件架构),java应用程序开发人员主要是使用该层封装好的api进行快速开发。

   applications:该层是java的应用程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放 器等处于该层,java开发人员开发的程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。

谈谈Android的IPC机制

IPC是内部进程通信的简称, 是共享"命名管道"的资源。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。

java中如何引用本地语言?

可以用JNI接口

DDMS和TraceView的区别?

DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是程序性能分析器

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

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

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

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

嵌入式操作系统内存管理有哪几种, 各有何特性

  页式,段式,段页,用到了MMU,虚拟空间等技术

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

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

Activity的生命周期

  和其他手机 平台 的应用 程序 一样,Android的应用程序 的生命周期是被统一掌控 的,也就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习 并适应它。简单地说一下为什么是这样:我们手机在运行 一个应用程序的时候,有可能打进来电话发进来短信 ,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能 ,另外系统也不允许你占用太多资源 ,至少要保证电话功能吧,所以资源不足的时候也就有可能被干掉。

     在一个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()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel
掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。

  onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉为了保证程序的正确性,你要在onPause()里
写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中因为生命周期的变化而
带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还
是数据 回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般都是采用
Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。

时间: 2024-11-08 18:28:53

Android面试精华的相关文章

Android面试精华总结

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24015867 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 某公司高级面试题(2015-03-14)[感谢helder分享] 1.详述Android系统架构,包括层与层之间调用.binder.jni.底层文件读写方法 2.描述自己的一个项目,要求画出结构图,UML图,详细描述项目种的技术点,技术难点以及解

Android 面试精华题目总结

下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖. 1.请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系. 拿主线程来说,主线程启动时会调用Looper.prepare()方法,会初始化一个Looper,放入Threadlocal中,接着调用Looper.loop()不断遍历Message Queue, Handler的创建依赖与当前线程中的Looper,如果当前线程没有L

转:Android面试

http://blog.csdn.net/singwhatiwanna/article/details/49230997 可以说是对android知识的总结,列在这里了.上面的博文地址里有详细介绍,感兴趣可以仔细阅读. 基本知识点.深入知识点.基本知识点的细节和系统核心机制. 1. 基本知识点 比如四大组件如何使用.如何创建Service.如何进行布局等.这类知识是需要熟练掌握的,并且也没什么难度. 2. 稍微深入的知识点 比如AIDL.Binder.多进程.View的绘制流程.事件分发.消息队

Android面试知识点(转)

该文所有问题转自:http://www.cnblogs.com/hpboy/p/3307371.html 一.算法,数据结构 1.排序算法 2.查找算法 3.二叉树 4.广度,深度算法: 二.java基础 1.集合Collection,List,Map等常用方法,特点,关系: 2.线程的同步,中断方式有几种,线程池,线程状态,常用的方法比较,比如wait,sleep等: 3.反射机制 4.IO包的使用,运用了什么设计模式 5.设计模式,常用的设计模式,运用场景: 6.内存管理,引用的种类: 7.

Android面试总结经

自上周怒辞职以后,就开始苦逼的各种面试生涯,生活完全靠私活来接济,时有时没有,真难,还能快乐的玩耍吗,最多一天面试了5家,哎感觉都是不急招人,各种等待通知,好不容易等来一家,还克扣了薪资,从我要的12k到他们给8k,感觉累觉不爱. 面试都是基本过了二面的,大到腾讯,阿里,百度,网易,小到15人的创业公司我都去了,难得今天休息一下,总结下面试经验,以便下次面试用到.技术题目我就不说了,这是基础,不会的还是把基础看下吧.后面的题目都是让人蛋疼的机制问题. 1.什么是线程,线程和进程的区别,线程的工作

【Android进阶】Android面试题目整理与讲解

这一篇文章专门整理一下研究过的Android面试题,内容会随着学习不断的增加,如果答案有错误,希望大家可以指正 1.简述Activity的生命周期 当Activity开始启动的时候,首先调用onCreate(),onStart(),onResume()方法,此时Activity对用户来说,是可见的状态 当Activity从可见状态变为被Dialog遮挡的状态的时候,会调用onPause()方法,此时的Activity对用户可见,但是不能相 应用户的点击事件 当Activity从可见状态变为被其他

Android面试题目2

1. 请描述下Activity的声明周期. onCreate->onStart->onRemuse->onPause->onStop->onRestart->onDestroy 2. 如果后台的Activity由于某种原因被系统回收,如何在回收之前保存当前状态.onSaveInstanceState().程序中的某一个Activity A 在运行时,主动或被动的运行另一个新的Activity B,这个时候A会执行onSaveInstanceState().B完成以后又回

今天的android面试总结

今天早上去一家公司面试android开发,现在总结一下 首先,这家公司没有笔试环节,而是直接和技术面试官面谈.面试官问我有没有带简历,我说没带.然后他就叫我等一下,估计是打印我的简历去了. 不一会,一共两位技术面试官进来,其中一个进来后直接叫我把我的项目作品展示给他看,连自我介绍都不用了.够直接,好,那我就打开我的应用给他看 他就针对这个项目说你这个是怎么实现的,那个又是怎么实现的.我就说这个是用viewpager,那个是用slidingmenu什么的..他还问到你这个图片加载是怎么实现的,我说

【Android 面试基础知识点整理】

针对Android面试中常见的一些知识点整理,Max 只是个搬运工,感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章,对于其中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正. 本文将持续更新,同时我也将其放在Github上:Point-of-Android 同时可以看Max的个人博客:海上钢琴师 Android中的异步任务机制 Android中AsyncTak的使用与源码分析 http://blog.csdn.net/bboyfeiyu/article/details/