android面试题五

转载地址:http://blog.csdn.net/tbwood/article/details/42969639

                  http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao  

                  http://www.cnblogs.com/purediy/p/3276545.html


47.xml文件的作用


xml(extensible markup language)可扩展标记语言。

xml的主要用途就是分离数据和使用数据的应用程序。专注于对数据本身的描述,不涉及对数据如何使用的信息。文件本身的格式是自说明的。于是XML数据文件就很通用,各种语言都可以实现其PARSER。跨平台加标准的PARSER,相当适合平台/应用间交换数据之用。


通用性都是通过在体系结构中加入额外的处理层,比如把数据和使用数据的应用程序分离开来,来达到的。XML正是处在这样一个额外的层上,这样带来直接的一个后果就是额外的空间/时间消耗。因此XML不适合应用在对性能要求非常高的环境。PARSER的处理,内存的分配和垃圾处理等等,都会影响系统的性能。


XML设计就是纯文本文件,二进制文件当然可以通过编码做成XML文件,自然需要解码处理。



48.Android中有哪几种解析xml的类,官方推荐哪种,以及它们的原理与区别。


XML解析主要有三种方式:SAX(Simple API for XML),DOM(Document Object Model)以及Android推荐的

                                           PULL解析方式


SAX是基于事件的解析器。SAX的工作原理简单的说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束等地方通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直到文档结束。

它是逐行扫描,可以做到边扫描边解析,因此SAX可以在解析文档的任意时刻停止解析。非常适合Android等移动设备。


DOM,即对象文档模型,它是将整个XML文档载入内存,每一个节点当作一个对象。

DOM的工作原理:使用DOM对XML文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档


PULL解析:Android推荐使用,更适合移动设备。(Android内置的)

PULL解析运行方式与SAX类似。都是基于事件模式。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析器自动将事件推入处理程序相反。(pull读取xml文件后触发相应的事件调用方法返回的是数字,还有pull可以在程序中控制想解析到哪里就可以停止解析。)

PULL工作原理:XML提供了开始和结束元素。当某个元素开始时,我们可以调用parser,nextText从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument事件。



49.横竖屏切换时,activity生命周期


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

     两次。

(2)设置Activity的android:configChanges="oritentation"时,切屏还是会重新调用各个生命周期,切横屏,竖屏都只会 

     调用一次。

(3)设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执

     行onConfigurationChanged方法。



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


将这个文件放在res/raw目录下即可,res/raw下的文件不会被压缩,这样可以直接提取该目录下的文件,会生成资源 id。



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


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



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


手机短信的长度是由编码决定的,根据国际标准,每条短信最多发送1120位。

如果发送纯英文字符,由于英文ASCII采用7位编码,所以1120位的限额可以传送1120/7=160个字符

一旦传送的字符中包含中文,日文,韩文等双字节字符,不论中文还是戏文,不论全角还是半角,都采用2个字节的8位编码,因此1120/8/2=70个字符,即最多传送70个字。


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


嵌入式实时操作系统是指能够及时响应外部事件的请求,并能及时控制所有实时设备与实时任务协调运行,且能在一个规定的时间内完成对事件的处理的操作系统。

主要用于工业控制,军事设备,航天航空等领域。对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而Android是基于Linux内核的,因此属于软实时。



54.android有几种布局,有什么特点?


(1)FrameLayout:帧布局,每加入一个组件,都会创建一个空白的区域,通常称为一帧,这些帧会根据gravity属性执行自动对齐。默认情况下,帧布局从屏幕的左上角(0,0)坐标点开始布局,多个组件层叠排序,后面的组件覆盖前面的组件。


(2)LinearLayout:线性布局,将放入其中的组件按照垂直或水平方向来布局,也就是控制放入其中的组件横向或纵向排列。Android的线性布局不会换行,当组件排列到窗体的边缘后,后面的组件将不会被显示出来。


(3)TableLayout:表格布局,与常见的表格类似,以行,列的形式来管理放入其中的UI组件。每一行是TableRow布局对象,TableRow中每放一个元素就是一列。


(4)RelativeLayout:相对布局,是按照组件之间的相对位置来进行布局。



55.px,sp,dp的区别


px:即像素,1px代表屏幕上一个物理的像素点。px单位不建议被使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同。

dp=dip:dp=px/设备密度 (getResources().getDisplayMetrics.density;)推荐使用这个,不依赖像素

常规设备密度:320*240(0.75),480*320(1),800*480(1.5),1280*720(2)

sp:与缩放无关的抽象像素,sp与dp很类似,但唯一的区别是Android系统允许用户自定义文字尺寸大小(小,正常,大,超大等),当文字尺寸是"正常"时,1sp=1dp=0.00625英寸,而当文字尺寸是"大"或"超大"时,1sp>1dp=0.00625英寸。类似我们在Windows里调整字体尺寸以后的效果--窗口大小不变,只有文字大小改变。



56.android中解析json方法,原理,区别


什么是JSON?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少流量从而加快速度。JSON就是一串字符串,只不过元素会使用特定的符号标注。


(1)Android自带的org.json解析

    类似xml的dom解析,遍历之后根据需要的key值去取数据,操作比较复杂而且速度比较慢。

(2)Gson解析

    Gson方法只需要建立一个对应json的javaBean类,就可以通过简单的操作解析出数据,而且速度比较快,可以按需

    去取数据。

(3)FastJson解析

    用于JSON对象和普通类对象互相转换的库

    原理:

    对象 to json:利用反射找到对象类的所有get方法,然后把"get"去掉,小写化,作为json的每个key值

    json to 对象:先同样通过反射找到对象类的所有set方法,然后使用无参构造函数新建一个类对象,从json字符串中

    取出一个key,先大写化,那么从所有setX()中找出对应的方法,然后进行赋值。如果找不到该方法,那么该值被忽

    略,也不报错。

(4)Jackson解析

    原理与fastJson一致,但是在解析json时,做了更加科学的check,因而能识别seta()这样的小写,但是如果找不

    到,则会抛出异常。



57.fragment生命周期


(1)当一个fragment被创建的时候

onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()

(2)当这个fragment对用户可见的 时候

onStart()-->onResume()

(3)当这个fragment进入“后台模式”的时候

onPause()-->onStop()

(4)当这个fragment被销毁的时候

onPause()-->onStop()-->onDestroyView()-->onDestroy()-->onDetach()

    

fragment的大部分状态都和activity类似

onAttach():当fragment被加入到activity时调用(在这个方法中可以获得所在的activity)

onCreateView():当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout

onActivityCreated():当activity的onCreate()方法返回后调用此方法

onDestroyView():当fragment中的视图被移除时,调用此方法

onDetach():当activity和fragment分离的时候,调用此方法

只有当activity在resumed状态时,fragment的生命周期才能独立的运转,其他时候是依赖activity的生命周期变化的。



58.Android中webview


webview可以使网页轻松地内嵌到app中,还可以直接跟js互相调用。它使用webkit渲染引擎加载显示网页。

webview有两个方法:setWebChromeClient和setWebViewClient

setWebViewClient:帮助webview处理各种通知,请求事件的。

setWebChromeClient:辅助webview处理javascript的对话框,网站图标,网站title,加载进度等。


实现webview有两种方法:

第一种方法的步骤:

(1)在Activity中实例化webview组件:WebView webview = new WebView(this);

(2)调用webview的loadUrl(),设置webview要显示的网页

    互联网用:webview.loadUrl("http://www.baidu.com");

    本地文件用:webview.loadUrl("file://android_asset/XX.html");  本地文件存放在assets文件中

(3)调用Activity的setContentView()来显示网页视图

(4)用webview点链接看了很多页以后,为了让webview支持回退功能,需要覆盖Activity类的onKeyDown(),如果不做

    任何处理,点击系统回退键,整个浏览器会调用finish()而结束自身,而不是回退到上一个页面。

(5)需要在Mainfest.xml文件中添加权限,否则会报错。


第二种方法的步骤:

(1)在布局文件中声明webview

(2)在Activity中实例化webview

(3)调用webview的loadUrl(),设置webview要显示的网页

(4)为了让webview能够响应超链接,调用setWebVIewClient(),设置webview视图

(5)用webview点链接看了很多页以后,为了让webview支持回退功能,需要覆盖Activity类的onKeyDown(),如果不做

    任何处理,点击系统回退键,整个浏览器会调用finish()而结束自身,而不是回退到上一个页面。

(6)需要在Mainfest.xml文件中添加权限,否则会报错。




59.android中如何传递数据,有哪几种方式


(1)基于消息的通信机制--Intent

(2)利用static静态数据

(3)基于外部存储的传输

    File/SharedPreferences/SQLite,针对第三方应用需要content provider

(4)基于IPC通信机制

(5)基于Application context



60.service是否是在主线程中执行,service是否能执行耗时的操作。


默认情况下,service是运行在当前app的主线程中。如果要执行耗时的操作,是在service中有单独开启一个子线程执行。



61.怎么让在启动一个activity时就是启动一个service 

     在activity的onCreate()里面调用startService();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值