android 常见面试题以及答案.docx
- 文档编号:9705257
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:26
- 大小:36.40KB
android 常见面试题以及答案.docx
《android 常见面试题以及答案.docx》由会员分享,可在线阅读,更多相关《android 常见面试题以及答案.docx(26页珍藏版)》请在冰豆网上搜索。
android常见面试题以及答案
android常见面试题以及答案
转自:
1. 请描述下Activity的生命周期。
2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
3. 如何将一个Activity设置成窗口的样式。
(EditedbySodino)
4. 如何退出Activity?
如何安全退出已调用多个Activity的Application?
5. 请介绍下Android中常用的五种布局。
6. 请介绍下Android的数据存储方式。
(EditedbySodino)
7. 请介绍下ContentProvider是如何实现数据共享的。
(EditedbySodino)
8. 如何启用Service,如何停用Service。
(EditedbySodino)
9. 注册广播有几种方式,这些方式有何优缺点?
请谈谈Android引入广播机制的用意。
10. 请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。
11. AIDL的全称是什么?
如何工作?
能处理哪些类型的数据?
12. 请解释下Android程序运行时权限与文件系统权限的区别。
(EditedbySodino)
13. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?
请说明原由。
14. 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。
请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。
15. 你如何评价Android系统?
优缺点。
1.Androiddvm的进程和Linux的进程,应用程序的进程是否为同一个概念
DVM执行时,在linux看来就是一应用程序进程,所以说是同一概念
2.sim卡的EF文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的
4.嵌入式操作系统内存管理有哪几种,各有何特性
页式,段式,段页,用到了MMU,虚拟空间等技术
5.什么是嵌入式实时操作系统,Android操作系统属于实时操作系统吗?
分硬实时和软实时,android属于linux内核,linux在用户空间可抢占,内核空间在2.4以后可局部抢占,严格来讲Android属于软实时系统
6.一条最长的短信息约占多少byte?
1、Androiddvm的进程和Linux的进程,应用程序的进程是否为同一个概念
DVM指dalivk的虚拟机。
每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。
而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念。
2、sim卡的EF文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的
3、嵌入式操作系统内存管理有哪几种,各有何特性
页式,段式,段页,用到了MMU,虚拟空间等技术
4、什么是嵌入式实时操作系统,Android操作系统属于实时操作系统吗?
嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。
主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。
又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。
5、一条最长的短信息约占多少byte?
中文70(包括标点),英文160,160个字节
6、android中的动画有哪几类,它们的特点和区别是什么?
两种,一种是Tween动画、还有一种是Frame动画。
Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
7、handler机制的原理
andriod提供了Handler和Looper来满足线程间的通信。
Handler先进先出原则。
Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
1)Looper:
一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
2)Handler:
你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从MessageQueue取出)所送来的消息。
3)MessageQueue(消息队列):
用来存放线程放入的消息。
4)线程:
UIthread通常就是mainthread,而Android启动程序时会替它建立一个MessageQueue。
8、说说mvc模式的原理,它在android中的运用
MVC(Model_view_contraller)”模型_视图_控制器”。
MVC应用程序总是由这三个部分组成。
Event(事件)导致Controller改变Model或View,或者同时改变两者。
只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。
类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。
一,listview你是怎么优化的。
二,view的刷新,之前说过
三,IPC及原理
四,Android多线程6n;
五,Android为什么要设计4大组件,他们之间的联系,不设计行不行(主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好【Technicolor的面试官问的这个】)
六,service的周期,activity的周期,谈下你对Android内部应用的了解,比如他做电话,以及联系人等等应用。
框架层有很多东西还是多看看,熟悉Android怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。
在就是你项目经验,突出你遇到什么难点,然后是怎么解决的!
尽量将每个技术点凸显出来,当然面试官有时候会为了体现你是否真正做过,他会问你,你在这个应用中做那个模块,用了多少个类之类的问题。
偶尔有的面试官会问你,你用过Android自带的单元测试了没,怎么用的?
当然我面试过很多家单位,有的是做平板,手机,数字电视,有的是做出个erp之类的客户端等等,出于前面的三个,基本上都是将Android的全部改掉,如果真正要做Android的话,大家要学的还很多。
总之,一句话,什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。
一个人的交谈能力也很重要,总之不是非常标准的普通话,最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~当然曾经一家公司的面试官跟我说过,技术是不惜钱的,只要你有能力,多少钱他都请。
确实,来北京求职期间,牛人真的很多,而且有的面试官也非常好,给了很多忠肯的意见。
并不是每个面试官都特想为难你的~最主要的还是想知道你的技术,因为他们也是吃公司饭,得为这个负责。
View重绘和内存泄露的好像是面试经常问的问题
1.View的刷新:
在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate.
2.GC内存泄露
出现情况:
1.数据库的cursor没有关闭
2.构造adapter时,没有使用缓存contentview
衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/
3.Bitmap对象不使用时采用recycle()释放内存
4.activity中的对象的生命周期大于activity
调试方法:
DDMS==>HEAPSZIE==>dataobject==>[TotalSize]
还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个Hal层.
这篇文章会涉及到以下几个内容
一Activity的生命周期
二让Activity变成一个窗口:
Activity属性设定
三你后台的Activity被系统回收怎么办:
onSaveInstanceState
四调用与被调用:
我们的通信使者-Intent
一Activity的生命周期
和其他手机平台的应用程序一样,Android的应用程序的生命周期是被统一掌控的,也
就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,只能学习并
适应它。
简单地说一下为什么是这样:
我们手机在运行一个应用程序的时候,有可能打进来电话
发进来短信,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另
外系统也不允许你占用太多资源,至少要保证电话功能吧,所以资源不足的时候也就有可
能被干掉。
如何优化Android中ListView滚动速度的方法
他是让你滚动的快点还是慢点?
慢的话:
有个延迟加载数据的方法,在API的demo中。
要是让ListView滚动速度快的话,你可以这样告诉他:
让他的手指在屏幕上迅速的上下滑动,当他的手指移动速度达到100px/0.1秒后,就可以看到快速滑动的效果了!
~
Android的国际化与本地化
internationalization(国际化)简称i18n,因为在i和n之间还有18个字符,localization(本地化),简称L10n。
一般说明一个地区的语言时,用语言_地区的形式,如 zh_CN,zh_TW.
各国语言缩写 http:
//www.loc.gov/standards/iso639-2/php/code_list.php
国家和地区简写 http:
//www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
android对i18n和L10n提供了非常好的支持。
android没有专门的API来提供国际化,而是通过对不同resource的命名来达到国际化,同时这种命名方法还可用于对硬件的区分,如不同的新视屏用不同的图片。
在eclipse的工程中,res目录有默认几项resource,如drawable,layout,menu,values
其余还有
res/anim/ 用来放置动画
res/xml/ 用来放置styletheme等xml定义。
res/raw/ 用来放置data数据
我们引用这些resource时候,在java代码中是通过R.resource_type.resource_name的方式来使用,如setTitle(R.string.main_title);
还有一种是在xml中直接引用,如
android: id="@+id/hello_view" android: layout_width="fill_parent" android: layout_height="wrap_content" android: text="@string/hello" /> 引用了名字为hello的字符串。 当程序运行时,通过Resource类会装载strings.xml中名字为hello的字符串。 但Resource类装载strings.xml时会根据当前手机的设置来选择装载哪一个xml文件。 这些手机设置有 MCCandMNC,Languageandregion,Screendimensions,Wider/tallerscreens,Screenorientation,Screenpixeldensity,Touchscreentype,SDKversion,也就是说通过手机当前语言区域,屏幕的大小,屏幕像素,以及当前androidsdk的版本号来选择。 通过把strings.xml放置在以这些选项命名的文件夹下,Resource类就能正确的装载所需的字符串。 我们以不同的local和region来做一次国际化,首先values表示默认的字符串,也即当Resource找不到匹配的资源时,默认使用values文件夹下的资源,其余drawable等资源也是同样的。 当命名这些文件夹的名字时,不同的选项用-分开,而且次序必须和andorid文档中table 文件夹的命名必须都是小写字符,否则在一些大小敏感的文件系统中可能会出错,如果你用大写,eclipse的adt都会自动报错。 小写字母r表示region的意思。 上图命名了中文简体和繁体以及默认选项,在strings.xml中除了字符串本身不一样,xml中定义该字符串的名字,id都是一样的。 所以在代码或者xml中引用该资源时,只要引用名字即可或者id即可,程序启动时候Resource类回到相应的目录下去寻找正确的字符串(资源) 通过在Settings中设置locale&Text我们可以让Resource类来选择相应文件夹下的内容, 选择英语时候结果如下,也即选择了values下的strings.xml 选择chinese(china)时,也即选了values-zh-rcn目录下的strings.xml 选择chinese(taiwan)时,也即选了values-zh-rtw目录下的strings.xml 其余手机的选项,像屏幕的像素等都可以建立相应得目录。 Android常用控件的信息! 单选框(RadioButton与RadioGroup): RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框被选中。 事件: setOnCheckedChangeListener(),处理单选框被选择事件。 把RadioGroup.OnCheckedChangeListener实例作为参数传入。 多选框(CheckBox): 每个多选框都是独立的,可以通过迭代所有的多选框,然后根据其状态是否被选中在获取其值。 事件: setOnCheckChangeListener()处理多选框被选择事件。 把CompoundButton.OnCheckedChangeListener实例作为参数传入 下拉列表框(Spring): Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值。 事件: setOnItemSelectedListener(),处理下拉列表框被选择事件把AdapterView.OnItemSelectedListener实例作为参数传入; 拖动条(SeekBar): SeekBar.getProgress()获取拖动条当前值 事件: setOnSeekBarChangeListener(),处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入。 菜单(Menu): 重写Activity的onCreatOptionMenu(Menumenu)方法,该方法用于创建选项菜单,咋用户按下手机的"Menu"按钮时就会显示创建好的菜单,在onCreatOptionMenu(MenuMenu)方法内部可以调用Menu.add()方法实现菜单的添加。 重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件。 进度对话框(ProgressDialog): 创建并显示一个进度对话框: ProgressDialog.show(ProgressDialogActivity.this,"请稍等","数据正在加载中....",true); 设置对话框的风格: setProgressStyle() ProgressDialog.STYLE_SPINNER 旋转进度条风格(为默认风格) ProgressDialog.STYLE_HORIZONTAL横向进度条风格 Android系统的架构! android的系统架构和其操作系统一样,采用了分层的架构。 从架构图看,android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 1.应用程序 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。 所有的应用程序都是使用JAVA语言编写的。 2.应用程序框架 开发人员也可以完全访问核心应用程序所使用的API框架。 该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。 同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统,其中包括; *丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(textboxes),按钮(buttons),甚至可嵌入的web浏览器。 *内容提供器(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据 *资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和布局文件(layoutfiles)。 *通知管理器(NotificationManager)使得应用程序可以在状态栏中显示自定义的提示信息。 *活动管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。 有关更多的细节和怎样从头写一个应用程序,请参考如何编写一个Android应用程序. 3.系统运行库 1)程序库 Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。 它们通过Android应用程序框架为开发者提供服务。 以下是一些核心库: *系统C库-一个从BSD继承来的标准C系统函数库(libc),它是专门为基于embeddedlinux的设备定制的。 *媒体库-基于PacketVideoOpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。 编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。 *SurfaceManager-对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。 *LibWebCore-一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。 *SGL-底层的2D图形引擎 *3Dlibraries-基于OpenGLES1.0APIs实现;该库可以使用硬件3D加速(如果可用)或者使用高度优化的3D软加速。 *FreeType-位图(bitmap)和矢量(vector)字体显示。 *SQLite-一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。 2)Android运行库 Android包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。 Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。 同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的“dx”工具转化成.dex格式由虚拟机执行。 Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。 4.Linux内核 Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。 Linux内核也同时作为硬件和软件栈之间的抽象层。 开机自动运行程序! Android实现开机自动运行程序2009-12-3115: 01: 17.0 开机 自动 运行 程序 有些时候,应用需要在开机时就自动运行,例如某个自动从网上更新内容的后台service。 怎样实现开机自动运行的应用? 在撰写本文时,联想到高焕堂先生以“Don''tcallme,I''llcallyouback! ”总结Android框架,真是说到点子上了。 理解这句话的含义,许多有关Android平台上实现某种功能的问题,都能迎刃而解。 使用场景: 手机开机后,自动运行程序,在屏幕上显示"Hello.Istarted! "字样。 背景知识: 当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为android.intent.action.BOOT_COMPLETED。 只要在程序中“捕捉”到这个消息,再启动之即可。 记住,Android框架说: Don''tcallme,I''llcallyouback。 我们要做的是做好接收这个消息的准备,而实现的手段就是实现一个BroadcastReceiver。 代码解析: 1、界面Activity: SayHello.java packagecom.ghstudio.BootStartDemo; importandroid.app.Activity; importandroid.os.Bundle; importandroid.widget.TextView; publicclassSayHelloextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); TextViewtv=newTextView(this); tv.setText("Hello.Istarted! "
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 常见面试题以及答案 常见 试题 以及 答案