Android面试题总结强劲版三_第1页
Android面试题总结强劲版三_第2页
Android面试题总结强劲版三_第3页
Android面试题总结强劲版三_第4页
Android面试题总结强劲版三_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

android面试题总结加强版(三)(转自CSDN)转载地址:自己总结的最强android应用面试题集26.假如后台的Activity由于某缘由被系统回收了,如何在被系统回收之前保存当前状态?当你的程序中某一个ActivityA在运行时中,主动或被动地运行另一个新的ActivityB这个时候A会执行Java代码publicvoidonSavelnstanceState(BundleoutState){ super.onSavelnstanceState(outState); outState.putLong(/zid〃,1234567890);}B完成以后又会来找A,这个时候就有两种状况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreateO方法,不同于干脆启动的是这回onCreate()里是带上参数savedinstanceState,没被收回的就还是onResume就好了。savedlnstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreateO里你可能会用到它,假如正常启动onCreate就不会有它,所以用的时候要推断一下是否为空。android:layout_width=,zfill_parent,zandroid:layout_height=/zfill_parent/z><EditTextandroid:layoutwidth二〃wrapcontent”android:gravity=〃center”android:layout_height二〃wrap_content〃android:text=〃one〃n. android:layout_gravity=,/rightz//></LinearLayout>这两个属性也可以用于FramlayoutTextview等等,表示的意思大同小异37.padding及margin的区分padding填充的意思,指的是view中的content及view边缘的距离,类似文本中的indent而margin表示的是view的左边缘及parentview的左边缘的距离margin一般用来描述控件间位置关系,而padding一般描述控件内容和控件的位置关系。简洁,padding是站在父view的角度描述问题,它规定它里面的内容必需及这个父view边界的距离。margin则是站在自己的角度描述问题,规定自己和其他(上下左右)的view之间的距离,假如同一级只有一个view,那么它的效果基本上就和padding一样了。例如我的XMLlayout代码如下:viewplaincopytoclipboardprint?[html]viewplaincopyprint?<?xmlversion=〃1・0〃encoding二〃utf-8〃?><LinearLayoutxmlns:android二〃〃android:orientation二〃vertical”android:layout_width=//fill_parent/zandroid:layout_height=zzfi1l_parent,zandroid:paddingLeft=,/10dip/zandroid:paddingRight=z/10dip/zandroid:paddingTop=//10dip/zandroid:paddingBottom=//10dip/z>n.<TextViewandroid:layoutwidth=〃wrapcontent”android:layout_height=/zwrap_contentz,android:background=,/#FF0000/zandroid:text=,/@string/hello/zandroid:paddingLeft=〃50dip〃android:paddingRight=〃50dip〃is. android:paddingTop=,z50dip/zandroid:layout_marginBottom=/,10dip///><TextViewandroid:layoutwidth二〃wrapcontent”android:layout_height=z/wrap_contentz,android:background=〃#FF0000〃android:text=z/@string/hello/zandroid:paddingLeft=〃50dip〃android:paddingRight=〃50dip〃android:paddingTop=〃50dip〃android:paddingBottom=〃50dip〃android:layout_marginBottom=z,10dipz//><TextViewandroid:layout_width="/wrap_content/zandroid:layout_height=//wrap_content//android:background=〃#FF0000〃android:text=,/@string/helloz/android:paddingLeft=〃50dip〃android:paddingRight=〃50dip〃android:paddingTop=〃50dip〃android:layout_marginBottom=/,10dip/z/><TextViewandroid:layout_width=〃wrapcontent”android: 1ayout_height=z/wrap_content/zandroid:background=z/#FF0000/zandroid:text=z/@string/hello/zandroid:paddingLeft=//50dipz/android:paddingRight=〃50dip〃android:paddingTop=〃50dip〃android:paddingBottom=z750dip/zandroid:layout」narginBottoni=〃10dip〃/></LinearLayout>那么我会得到如下的效果,图上已经很明确的标出来区分咯。.注册广播接收者两种方式的区分现在我们就来实现个简洁的广播程序。Android供应了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中指定。他们之间的区分就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。.Dalvik基于JVM的改进.几个class变为一个dex,constantpool,省内存.Zygote,copy-on-writeshared,省内存,省cpu,省电.基于寄存器的bytecode,省指令,省cpu,省电.Trace-basedJIT,省cpu,省电,省内存40.android中有哪几种解析xml的类,官方举荐哪种?以及它们的原理和区分.0D0M解析优点:XML树在内存中完整存储,因此可以干脆修改其数据和结构.可以通过该解析器随时访问XML树中的任何一个节点.D0M解析器的API在运用上也相对比较简洁.缺点:假如XML文档体积比较大时,将文档读入内存是特别消耗系统资源的.运用场景:DOM是用及平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点的集合.这个层次结构允许开发人员在树中找寻特定信息.分析该结构通常须要加载整个文档和构造层次结构,然后才能进行任何工作.DOM是基于对象层次结构的.0SAX解析优点:SAX对内存的要求比较低,因为它让开发人员自己来确定所要处理的标签.特殊是当开发人员只须要处理文档中所包含的部分数据时,SAX这种扩展实力得到了更好的体现.缺点:用SAX方式进行XML解析时,须要依次执行,所以很难访问到同一文档中的不同数据.止匕外,在基于该方式的解析编码过程也相对困难.运用场景:对于含有数据量特别巨大,而又不用对文档的全部数据进行遍历或者分析的时候,运用该方法特别有效.该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签处即可.0Xmlpull解析androidSDK供应了xmlpullapi,xmlpull和sax类似,是基于流(stream)操作文件,然后依据节点事务回调开发者编写的处理程序.因为是基于流的处理,因此xmlpull和sax都比较节约内存资源,不会象dom那样要把全部节点以对橡树的形式呈现在内存中.xmlpull比sax更简明,而且不须要扫描完整个流..Android系统中GC什么状况下会出现内存泄露呢?出现状况:1.数据库的cursor没有关闭2.构造adapter时,没有运用缓存contentview 衍生listview的优化问题 削减创建view的对象,充分运用contentview,可以运用一静态类来优化处理getview的过程/3.Bitmap对象不运用时采纳recycle()释放内存4.activity中的对象的生命周期大于activity调试方法:DDMS==>HEAPSZIE==>dataobject==>[TotalSize].谈谈对AndroidNDK的理解NDK全称:NativeDevelopmentKit.误会 误会一:NDK发布之前,Android不支持进行C开发 在Google中搜寻“NDK”,很多“Android最终可以运用C++开发”之类的标题,这是一种对Android平台编程方式的误会.其实,Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于AndroidSDK进行开发的第三方应用都必需运用Java语言.但这并不等同于“第三方应用只能运用Java”.在AndroidSDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是始终都可以实现的.当然这种误会的产生是有根源的:在AndroidSDK文档里,找不到任何JNI方面的帮助.即使第三方应用开发者运用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍.我曾经花了不少时间,安装交叉编译器创建so,并通过asset (资源)方式,实现捆绑so发布.但这种方式只能属于取巧的方式,并非官方支持.所以,在NDK出来之前,我们将“Java+C” 的开发模式称之为灰色模式,即官方既不声明“支持这种方式”,也不声明“不支持这种方式”.误会二:有了NDK,我们可以运用纯C开发Android应用AndroidSDK采纳Java语言发布,把众多的C开发人员解除在第三方应用开发外(留意:我们全部探讨都是基于“第三方应用开发" ,Android系统基于Linux,系统级别的开发确定是支持C语言的.).NDK的发布,很多人会误以为,类似于Symbian.WM,在Android平台上最终可以运用纯C.C++开发第三方应用了!其实不然,NDK文档明确说明:itisnotagoodway.因为NDK并没有供应各种系统事务处理支持,也没有供应应用程序生命周期维护.此外,在本次发布的NDK中,应用程序UI方面的API也没有供应.至少目前来说,运用纯C.C++开发一个完整应用的条件还不完备.1.NDK是一系列工具的集合.NDK供应了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.这些工具对开发者的帮助是巨大的.NDK集成了交叉编译器,并供应了相应的mk文件隔离CPU.平台.ABI等差异,开发人员只须要简洁修改mk文件(指出“哪些文件须要编译” . “编译特性要求”等),就可以创建出NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作. 2.NDK供应了一份稳定.功能有限的API头文件声明.Google明确声明该API是稳定的,在后续全部版本中都稳定支持当前发布的API.从该版本的NDK中看出,这些API支持的功能特别有限,包含有:C标准库(libc).标准数学库(libm).压缩库(libz).Log库(liblog)..NDK带来什么1.NDK的发布,使“Java+C” 的开发方式最终转正,成为官方支持的开发方式.运用NDK,我们可以将要求高性能的应用逻辑运用C开发,从而提高应用程序的执行效率.运用NDK,我们可以将须要保密的应用逻辑运用C开发.终归,Java包都是可以反编译的.NDK促使专业so组件商的出现.(乐观猜想,要视乎Android用户的数量) 2.NDK将是Android平台支持C开发的开端.NDK供应了的开发工具集合,使开发人员可以便捷地开发.发布C组件.同时,Google承诺在NDK后续版本中提高“可调式”实力,即供应远程的gdb工具,使我们可以便捷地调试C源码.在支持Android平台C开发,我们能感觉到Google花费了很大精力,我们有理由向往 “C组件支持”只是GoogleAndroid平台上C开发的开端.终归,C程序员仍旧是码农阵营中的确定主力,将这部分人解除在Android应用开发之外,明显是不利于Android平台旺盛昌盛的.Java代码if(savedlnstanceState!=null){ longid=savedlnstanceState.getLong("id"); }就像正式的Notepad教程里的状况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以依据这个id去把那个note取出来,程序就完整一些。这也是看你的应用需不须要保存什么,比如你的界面就是读取一个列表,那就不须要特殊记住什么,哦, 没准你须要记住滚动条的位置..如何退出Activity对于单一Activity的应用来说,退出很简洁,干脆finish。即可。当然,也可以用killProcess()和System,exit。这样的方法。现供应几个方法,供参考:1、抛异样强制退出:该方法通过抛异样,使程序ForceClose。验证可以,但是,须要解决的问题是,如何使程序结束掉,而不弹出ForceClose的窗口。2、记录打开的Activity:每打开一个Activity,就记录下来。在须要退出时,关闭每一个Activity即可。3、发送特定广播:在须要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。4、递归退出在打开新的Activity时运用startActivityForResult,然后自己加标记,在onActivityResult中处理,递归关闭。除了第一个,都是想方法把每一个Activity都结束掉,间接达到目的。但是这样做同样不完备。你会发觉,假如自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。但至少,我们的目的达到了,而且没有影响用户运用。为了编程便利,最好定义一个Activity基类,处理这些共通问题。.请说明下在单线程模型中Message、Handler、MessageQueue>Looper之间的关系。MessageQueue(消息队列):用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue()得到当前线程的消息队列Handler:可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息、,消息将只会发送到及它关联的消息队列,然也只能处理该消息队列中的消息Looper:是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。Looper也把消息队列里的消息广播给全部的Handler,Handler接受到消息后调用handleMessage进行处理Message:消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理..你如何评价Android系统?优缺点。答:优点:1、学习的开源性2、软件兼容性比较好 3、软件发展快速 4、界面布局好 缺点:1、版本过多 2、先有软件少 3、商务性能差Android供应了5种方式存储数据:(1)运用SharedPreferences存储数据;它是Android供应的用来存储一些简洁配置信息的一种机制,采纳了XML格式将数据存储到设备中。只能在同一个包内运用,不能在不同的包之间运用。(2)文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,及Java中实现I/O的程序是完全一样的,供应了open。和open。方法来读取设备上的文件。(3)SQLite数据库存储数据;SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。(4)运用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此ContentProvider的各种数据类型。(5)网络存储数据;通过网络上供应应我们的存储空间来上传(存储)和下载(获得)我们存储在网络空间中的数据信息。Android中Activity,Intent,ContentProvider,Service各有什么区分。Activity:活动,是最基本的android应用程序组件。一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来。Intent:意图,描述应用想干什么。最重要的部分是动作和动作对应的数据。ContentProvider:内容供应器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据和其他应用共享时,内容供应器就可以发挥作用了。Service:服务,具有一段较长生命周期且没有用户界面的程序。View,surfaceView,GLSurfaceView有什么区分。view是最基础的,必需在UI主线程内更新画面,速度较慢。SurfaceView是view的子类,类似运用双缓机制,在新的线程中更新画面所以刷新界面速度比view快GLSurfaceView是SurfaceView的子类,opengl专用的Manifest,xml文件中主要包括哪些信息?manifest:根节点,描述了package中全部的内容。uses-permission:恳求你的package正常运作所需给予的平安许可。permission:声明白平安许可来限制哪些程序能你package中的组件和功能。instrumentation:声明白用来测试此package或其他package指令组件的代码。application:包含package中application级别组件声明的根节点。activity:Activity是用来及用户交互的主要工具。receiver:IntentReceiver能使的application获得数据的变更或者发生的操作,即使它当前不在运行。service:Service是能在后台运行随意时间的组件。provider:ContentProvider是用来管理长久化数据并发布给其他应用程序运用的组件。依据自己的理解描述下Android数字签名。⑴全部的应用程序都必需有数字证书,Android系统不会安装一个没有数字证书的应用程序⑵Android程序包运用的数字证书可以是自签名的,不须要一个权威的数字证书机构签名认证(3)假如要正式发布一个Android,必需运用一个合适的私钥生成的数字证书来给程序签名,而不能运用adt插件或者ant工具生成的调试证书来发布。(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。假如程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。AIDL的全称是什么?如何工作?能处理哪些类型的数据?AIDL全称AndroidInterfaceDefinitionLanguage(AndRoid接口描述语言)是一种借口描述语言;编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或C0RBA类似,是基于接口的,但它是轻量级的。它运用代理类在客户端和实现层间传递值.假如要运用AIDL,须要完成2件事情:1.引入AIDL的相关类.;2.调用aidl产生的class.理论上,参数可以传递基本数据类型和String,还有就是Bundle的派生类,不过在Eclipse中,目前的ADT不支持Bundle做为参数,详细实现步骤如下:1、创建AIDL文件,在这个文件里面定义接口,该接口定义了可供客户端访问的方法和属性。2、编译AIDL文件,用Ant的话,可能须要手动,运用Eclipseplugin的话,可以依据adil文件自动生产java文件并编译,不须要人为介入.3、在Java文件中,实现AIDL中定义的接口.编译器会依据AIDL接口,产生一个JAVA接口。这个接口有一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用须要的几个方法。接下来就须要自己去实现自定义的几个接口了.4、向客户端供应接口ITaskBinder,假如写的是service,扩展该Service并重载onBind()方法来返回一个实现上述接口的类的实例。5、在服务器端回调客户端的函数.前提是当客户端获得的IBinder接口的时候,要去注册回调函数,只有这样,服务器端才知道该调用那些函数AIDL语法很简洁,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。由于远程调用的须要,这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型:不须要import声明的简洁Java编程语言类型(int,boolean等)String,CharSequence不须要特殊声明List,Map和Parcelables类型,这些类型内所包含的数据成员也只能是简洁数据类型,String等其他比支持的类型.(另外:我没尝试Parcelables,在Eclip

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论