还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
android面试题总结加强版三转自CSDN转载地址自己总结的最强android应用面试题集
26.假如后台的Activity由于某缘由被系统回收了,如何在被系统回收之前保存当前状态?当你的程序中某一个Activity A在运行时中,主动或被动地运行另一个新的Activity B这个时候A会执行Java代码public voidonSavelnstanceStateBundle outState{super.onSavelnstanceState outState;outState.putLong/zid〃,1234567890;}B完成以后又会来找A,这个时候就有两种状况,一种是A被回收,一种是没有被回收,被回收的A就要重新调用onCreateO方法,不同于干脆启动的是这回onCreate里是带上参数savedinstanceState,没被收回的就还是onResume就好了savedlnstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象在onCreateO里你可能会用到它,假如正常启动onCreate就不会有它,所以用的时候要推断一下是否为空
4.android:layout_width=,zf ill_parent,z
5.android:layout_height=/zfill_parent/z
6.EditText
7.android:layoutwidth二〃wrapcontent”
8.android:gravity=〃center”
9.android:layout_height二〃wrap_content〃
10.android:text=〃one〃n.android:layout_gravity=,/rightz//
12./LinearLayout这两个属性也可以用于Framlayout Textview等等,表示的意思大同小异
37.padding及margin的区分padding填充的意思,指的是view中的content及view边缘的距离,类似文本中的indent而margin表示的是view的左边缘及parent view的左边缘的距离margin一般用来描述控件间位置关系,而padding一般描述控件内容和控件的位置关系简洁,padding是站在父view的角度描述问题,它规定它里面的内容必需及这个父view边界的距离margin则是站在自己的角度描述问题,规定自己和其他(上下左右)的view之间的距离,假如同一级只有一个view,那么它的效果基本上就和padding一样了例如我的XML layout代码如下:view plaincopyto clipboardprint[html]view plaincopyprintxmlversion=〃10〃encoding二〃utf-8〃・
1.LinearLayout xmlns:android二〃〃
2.android:orientation二〃vertical”
3.android:layout_width=//fill_parent/z
4.android:layout_height=zzf i1l_parent,z
5.android:paddingLeft=,/10dip/z
6.android:paddingRight=z/10dip/z
7.android:paddingTop=//10dip/z
8.android:paddingBottom=//10dip/z
9.
10.n.TextViewandroid:layoutwidth=〃wrapcontent”
12.android:layout_height=/zwrap_contentz,
13.android:background=,/#FF0000/z
14.android:text=,/@string/hello/z
15.android:paddingLeft=〃50dip〃
16.android:paddingRight=〃50dip〃
17.is.android:paddingTop=,z50dip/z
20.android:layout_marginBottom=/,10dip//
21./
22.TextView
23.android:layoutwidth二〃wrapcontent”
24.
25.android:layout_height=z/wrap_contentz,
26.android:background=〃#FF0000〃
27.android:text=z/@string/hello/z
28.android:paddingLeft=〃50dip〃
29.android:paddingRight=〃50dip〃
30.android:paddingTop=〃50dip〃
31.android:paddingBottom=〃50dip〃
32.android:layout_marginBottom=z,10dipz/
33./
34.TextView
35.android:layout_width=/wrap_content/z
36.android:layout_height=//wrap_content//
37.android:background=〃#FF0000〃
38.android:text=,/@string/helloz/
39.android:paddingLeft=〃50dip〃
40.android:paddingRight=〃50dip〃android:paddingTop=〃50dip〃android:layout_marginBottom=/,10dip/z
42.
43./TextView
44.android:layout_width=〃wrapcontent”
45.andro id:1ayou t_he igh t=z/wrap_cont ent/z
46.android:background=z/#FF0000/z
47.android:text=z/@string/hel lo/z
48.android:paddingLeft=//50dipz/
49.android:paddingRight=〃50dip〃
50.android:paddingTop=〃50dip〃
51.android:paddingBottom=z750dip/z
52.android:layout」narginBottoni=〃10dip〃
53.
54.//LinearLayout
55.那么我会得到如下的效果,图上已经很明确的标出来区分咯
38.注册广播接收者两种方式的区分现在我们就来实现个简洁的广播程序Android供应了两种注册广播接受者的形式,分别是在程序中动态注册和在xml中指定他们之间的区分就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用
39.Dalvik基于JVM的改进
1.几个class变为一个dex,constant pool,省内存
2.Zygote,copy-on-write shared,省内存,省cpu,省电
3.基于寄存器的bytecode,省指令,省cpu,省电
4.Trace-based JIT,省cpu,省电,省内存
40.android中有哪几种解析xml的类,官方举荐哪种?以及它们的原理和区分.0D0M解析优点
1.XML树在内存中完整存储,因此可以干脆修改其数据和结构.
2.可以通过该解析器随时访问XML树中的任何一个节点.
3.D0M解析器的API在运用上也相对比较简洁.缺点:假如XML文档体积比较大时,将文档读入内存是特别消耗系统资源的.运用场景:DOM是用及平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点的集合.这个层次结构允许开发人员在树中找寻特定信息.分析该结构通常须要加载整个文档和构造层次结构,然后才能进行任何工作.DOM是基于对象层次结构的.0SAX解析优点SAX对内存的要求比较低,因为它让开发人员自己来确定所要处理的标签.特殊是当开发人员只须要处理文档中所包含的部分数据时,SAX这种扩展实力得到了更好的体现.缺点用SAX方式进行XML解析时,须要依次执行,所以很难访问到同一文档中的不同数据.止匕外,在基于该方式的解析编码过程也相对困难.运用场景对于含有数据量特别巨大,而又不用对文档的全部数据进行遍历或者分析的时候,运用该方法特别有效.该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签处即可.0Xmlpull解析android SDK供应了xmlpull api,xmlpull和sax类似,是基于流stream操作文件,然后依据节点事务回调开发者编写的处理程序.因为是基于流的处理,因此xmlpull和sax都比较节约内存资源,不会象dom那样要把全部节点以对橡树的形式呈现在内存中.xmlpull比sax更简明,而且不须要扫描完整个流.
41.Android系统中GC什么状况下会出现内存泄露呢?出现状况:
1.数据库的cursor没有关闭
2.构造adapter时,没有运用缓存contentview衍生listview的优化问题--------削减创建view的对象,充分运用contentview,可以运用一静态类来优化处理getview的过程/
3.Bitmap对象不运用时采纳recycle释放内存
4.activity中的对象的生命周期大于activity调试方法DDMS==HEAPSZIE==dataobject==[Total Size]
42.谈谈对Android NDK的理解NDK全称Native DevelopmentKit
2.误会误会一NDK发布之前,Android不支持进行C开发在Google中搜寻“NDK”,很多“Android最终可以运用C++开发”之类的标题,这是一种对Android平台编程方式的误会.其实,Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意味着基于Android SDK进行开发的第三方应用都必需运用Java语言.但这并不等同于“第三方应用只能运用Java”.在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是始终都可以实现的.当然这种误会的产生是有根源的:在Android SDK文档里,找不到任何JNI方面的帮助.即使第三方应用开发者运用JNI完成了自己的C动态链接库(so)开发,但是so如何和应用程序一起打包成apk并发布?这里面也存在技术障碍.我曾经花了不少时间,安装交叉编译器创建so,并通过asset(资源)方式,实现捆绑so发布.但这种方式只能属于取巧的方式,并非官方支持.所以,在NDK出来之前,我们将“Java+C”的开发模式称之为灰色模式,即官方既不声明“支持这种方式”,也不声明“不支持这种方式”.误会二:有了NDK,我们可以运用纯C开发Android应用Android SDK采纳Java语言发布,把众多的C开发人员解除在第三方应用开发外(留意:我们全部探讨都是基于“第三方应用开发,Android系统基于Linux,系统级别的开发确定是支持C语言的.).NDK的发布,很多人会误以为,类似于Symbian.WM,在Android平台上最终可以运用纯C.C++开发第三方应用了!其实不然,NDK文档明确说明it isnot agoodway.因为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).
3.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组件支持”只是Google Android平台上C开发的开端.终归,C程序员仍旧是码农阵营中的确定主力,将这部分人解除在Android应用开发之外,明显是不利于Android平台旺盛昌盛的.Java代码ifsavedlnstanceState!=null{long id=savedlnstanceState.getLongid;}就像正式的Notepad教程里的状况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以依据这个id去把那个note取出来,程序就完整一些这也是看你的应用需不须要保存什么,比如你的界面就是读取一个列表,那就不须要特殊记住什么,哦,没准你须要记住滚动条的位置.
27.如何退出Activity对于单一Activity的应用来说,退出很简洁,干脆finish即可当然,也可以用killProcess和System,exit这样的方法现供应几个方法,供参考
1、抛异样强制退出该方法通过抛异样,使程序Force Close验证可以,但是,须要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口
2、记录打开的Activity每打开一个Activity,就记录下来在须要退出时,关闭每一个Activity即可
3、发送特定广播在须要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可
4、递归退出在打开新的Activity时运用startActivityForResult,然后自己加标记,在onActivityResult中处理,递归关闭除了第一个,都是想方法把每一个Activity都结束掉,间接达到目的但是这样做同样不完备你会发觉,假如自己的应用程序对每一个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了但至少,我们的目的达到了,而且没有影响用户运用为了编程便利,最好定义一个Activity基类,处理这些共通问题
28.请说明下在单线程模型中Message、Handler、Message QueueLooper之间的关系Message Queue消息队列用来存放通过Handler发布的消息,通常附属于某一个创建它的线程,可以通过Looper.myQueue得到当前线程的消息队列Handler可以发布或者处理一个消息或者操作一个Runnable,通过Handler发布消息、,消息将只会发送到及它关联的消息队列,然也只能处理该消息队列中的消息Looper是Handler和消息队列之间通讯桥梁,程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列Looper也把消息队列里的消息广播给全部的Handler,Handler接受到消息后调用handleMessage进行处理Message消息的类型,在Handler类中的handleMessage方法中得到单个的消息进行处理.
29.你如何评价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存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content Provider的各种数据类型
(5)网络存储数据;通过网络上供应应我们的存储空间来上传(存储)和下载(获得)我们存储在网络空间中的数据信息
31.Android中Activity,Intent,Content Provider,Service各有什么区分Activity活动,是最基本的android应用程序组件一个活动就是一个单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类继承而来Intent意图,描述应用想干什么最重要的部分是动作和动作对应的数据Content Provider内容供应器,android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中当你想将你的应用数据和其他应用共享时,内容供应器就可以发挥作用了Service服务,具有一段较长生命周期且没有用户界面的程序
32.View,surfaceView,GLSurfaceView有什么区分view是最基础的,必需在UI主线程内更新画面,速度较慢SurfaceView是view的子类,类似运用双缓机制,在新的线程中更新画面所以刷新界面速度比view快GLSurfaceView是SurfaceView的子类,opengl专用的
33.Manifest,xml文件中主要包括哪些信息?manifest根节点,描述了package中全部的内容uses-permission恳求你的package正常运作所需给予的平安许可permission声明白平安许可来限制哪些程序能你package中的组件和功能instrumentation声明白用来测试此package或其他package指令组件的代码application包含package中application级别组件声明的根节点activityActivity是用来及用户交互的主要工具receiverIntentReceiver能使的application获得数据的变更或者发生的操作,即使它当前不在运行serviceService是能在后台运行随意时间的组件provider ContentProvider是用来管理长久化数据并发布给其他应用程序运用的组件
34.依据自己的理解描述下Android数字签名⑴全部的应用程序都必需有数字证书,Android系统不会安装一个没有数字证书的应用程序⑵Android程序包运用的数字证书可以是自签名的,不须要一个权威的数字证书机构签名认证
(3)假如要正式发布一个Android,必需运用一个合适的私钥生成的数字证书来给程序签名,而不能运用adt插件或者ant工具生成的调试证书来发布
(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期假如程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
35.AIDL的全称是什么?如何工作?能处理哪些类型的数据?AIDL全称Android InterfaceDefinition Language(AndRoid接口描述语言)是一种借口描述语言;编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或C0RBA类似,是基于接口的,但它是轻量级的它运用代理类在客户端和实现层间传递值.假如要运用AIDL,须要完成2件事情
1.引入AIDL的相关类.;
2.调用aidl产生的class.理论上,参数可以传递基本数据类型和String,还有就是Bundle的派生类,不过在Eclipse中,目前的ADT不支持Bundle做为参数,详细实现步骤如下
1、创建AIDL文件,在这个文件里面定义接口,该接口定义了可供客户端访问的方法和属性
2、编译AIDL文件,用Ant的话,可能须要手动,运用Eclipse plugin的话,可以依据adil文件自动生产java文件并编译,不须要人为介入.
3、在Java文件中,实现AIDL中定义的接口.编译器会依据AIDL接口,产生一个JAVA接口这个接口有一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用须要的几个方法接下来就须要自己去实现自定义的几个接口了.
4、向客户端供应接口ITaskBinder,假如写的是service,扩展该Service并重载onBind方法来返回一个实现上述接口的类的实例
5、在服务器端回调客户端的函数.前提是当客户端获得的IBinder接口的时候,要去注册回调函数,只有这样,服务器端才知道该调用那些函数AIDL语法很简洁,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值由于远程调用的须要,这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型
1.不须要import声明的简洁Java编程语言类型int,boolean等
2.String,CharSequence不须要特殊声明
3.List,Map和Parcelables类型,这些类型内所包含的数据成员也只能是简洁数据类型,String等其他比支持的类型.另外我没尝试Parcelables,在Eclipse+ADT下编译不过,或许以后会有所支持.实现接口时有几个原则.抛出的异样不要返回给调用者.跨进程抛异样处理是不行取的..IPC调用是同步的假如你知道一个IPC服务须要超过几毫秒的时间才能完成地话,你应当避开在Activity的主线程中调用也就是IPC调用会挂起应用程序导致界面失去响应.这种状况应当考虑单起一个线程来处理..不能在AIDL接口中声明静态属性IPC的调用步骤
1.声明一个接口类型的变量,该接口类型在.aidl文件中定义
2.实现ServiceConnection
3.调用ApplicationContext.bindService,并在ServiceConnection实现中进行传递.
4.在ServiceConnection.onServiceConnected实现中,你会接收一个IBinder实例被调用的Service.调用YourInterfaceName.Stub,aslnterface IBinderservice将参数转换为Yourlnterface类型
5.调用接口中定义的方法你总要检测到DeadObjectException异样,该异样在连接断开时被抛出它只会被远程方法抛出
6.断开连接,调用接口实例中的ApplicationContext.unbindService参考:
36.android:gravity及android:1ayout_gravity的区分LinearLayout有两个特别相像的属性android:gravity及android:layout_gravity他们的区分在于android:gravity用于设置oView组件的对齐方式,而android:layout_gravity用于设置Container组件的对齐方式举个例子,我们可以通过设置android:gravity=〃center〃来让EditText中的文字在EditText组件中居中显示;同时我们设置EditText的android:layout_gravity二〃right〃来让EditText组件在LinearLayout中居中显示来实践以下正如我们所看到的,在EditText中,其中的文字已经居中显示了,而EditText组件自己也对齐到了LinearLayout的右侧[html]view plaincopyprint
1.〈LinearLayout
2.xmlns:android二〃〃。
个人认证
优秀文档
获得点赞 0