《Android项目实战——手机安全卫士》_面试题答案_第1页
《Android项目实战——手机安全卫士》_面试题答案_第2页
《Android项目实战——手机安全卫士》_面试题答案_第3页
《Android项目实战——手机安全卫士》_面试题答案_第4页
《Android项目实战——手机安全卫士》_面试题答案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、Android项目实战手机安全卫士面试题答案第1章 项目简介1、 请问Android程序的真正入口是什么。Android程序的真正入口是Application类的onCreate()方法。2、 请问JSON数据与XML数据各有哪些优缺点。1)JSON定义JSON是一种轻量级的数据交互格式,具有良好的可读性和快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交互。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。2)XML定义XML表示扩展标记语言 (Extensible Markup Lan

2、guage, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。 3)XML和JSON的优缺点对比l 可读性方面JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。 l 可扩展性方面XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。l 编码难度方面XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.or

3、g提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。l 流行度方面XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。l 数据体积方面JSON相对于XML来讲,数据的体积小,传递的速度更快些。l 数据交互方面JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。l 传输速度方面JSON的传输速度要远远快于XML。 第2章 手机防盗模块1、请问Android中有几种数据存储方式,每种方式有哪些特点。 Android中有5种数据存储方式,分

4、别为文件存储、SQLite数据库、SharedPreferences、ContentProvider、网络。每种存储方式的特点如下:1)文件存储文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与Java中实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。2)SQLite数据库SQLite是Android所集成的一个轻量级的嵌入式数据库,它不仅可以使用Andorid API操作,同时它也支持SQL语句进行增删改查等操作。3)SharedPreferences SharedPreferences是An

5、droid提供的用于存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。不仅可以在同一个包下使用,还可以访问其他应用程序的数据,但是由于SharedPreferences的局限性,在实际操作中很少用来读取其他应用程序的数据。4)ContentProviderContentProvider主要用于不同应用程序之间共享数据,ContentProvider更好的提供了数据共享接口的统一性,使不同应用共享数据更规范和安全。5)网络存储数据通过网络上提供的存储空间来上传(存储)或下载(获取)我们存储在网络空间中的数据信息。2、请问为什么要对ListView控件进行优化,以及如何优化。在使

6、用ListView控件的过程中,由于加载条目过多在滑动时可能造成卡顿。这是因为ListView在当前屏幕显示多少个条目,就会创建多少个对象,每一个条目都是一个对象。在滑动时,滑出屏幕的条目对象会被销毁,新加载到屏幕上的条目会创建新的对象,这样在ListView快速滑动时就会不断的【创建对象】à【销毁对象】à【创建对象】,并且每一个条目都需要加载一次布局,加载布局时会不断进行findViewById()操作初始化控件,而布局XML文件是以树形进行加载,每次加载一个条目都需要从根节点进行初始化,这样对内存消耗也比较大,并且浪费时间。如果每个条目都有图片,图片加载的时间比较长,就

7、会造成内存溢出异常。为此就需要对ListView进行优化,优化的目的是在滑动时不会重复创建对象,减少内存消耗和屏幕渲染处理。具体步骤如下:1)创建静态类创建一个静态类,将需要加载的控件变量放在该静态类中,保证所有控件只创建一次对象,不会重复创建对象,具体代码如下所示:static class ViewHolderTextView mNameTV;TextView mPhoneTV;2)复用缓存View对象 在Adapter的getView(int position, View convertView, ViewGroup parent)方法中,第二个参数convertView代表的就是之前滑动

8、出屏幕的条目对象。如果是第一次加载该方法时,会创建新的View对象,如果滑动ListView时,滑动出屏幕的View对象会以缓存的形式存在,而convertView就是缓存的View对象,我们可以复用缓存该对象减少新对象的创建。在加载布局时先判断convertView是否存在,如果convertView=null说明没有缓存的View对象,则使用View.inflate()方法加载布局,进行布局的初始化,否则复用缓存的View对象。如果复用了缓存的View对象,也就是convertView,滑动时当前屏幕的条目可能和之前划出屏幕的条目使用的是同一个对象,这样就可能造成出现重复条目等异常,因此需

9、要对convertView进行setTag()设置将holder绑定到了view上,以确定当前显示的是哪一个条目,防止出现重复条目。具体代码如下所示:if(convertView = null)convertView = View.inflate(context, R.layout.item_list_contact_select, null);holder = new ViewHolder();holder.mNameTV = (TextView) convertView.findViewById(R.id.tv_name);holder.mPhoneTV = (TextView) conv

10、ertView.findViewById(R.id.tv_phone);convertView.setTag(holder);elseholder = (ViewHolder) convertView.getTag();第3章 通讯卫士模块1、 请问Handler消息机制的原理是什么,及应用场景。在Android系统中出于性能优化考虑,Android的UI操作并不是线程安全的,这意味着如果有多个线程并发操作UI组件,可能导致线程安全问题。为了解决这个问题,Android制定了一条简单的原则,只允许UI线程(亦即主线程)修改Activity中的UI组件。但实际上,有部分UI需要在子线程中控制其修

11、改逻辑,因此子线程需要通过handler通知主线程修改UI,实现线程间通信。(在游戏开发中尤其常见,例如需要让新启动的线程周期性的改变UI,或者实现文件下载等。) Handler机制主要包括四个关键对象,分别是:Message、Handler、MessageQueue、Looper。下面对这四个关键对象进行简要的介绍。1)MessageMessage是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。Message的what字段可以用来携带一些整型数据,obj字段可以用来携带一个Object对象。2)HandlerHandler顾名思义就是处理者的意思,它主要用于发

12、送消息和处理消息。一般使用Handelr对象的sendMessage()方法发送消息,发出的消息经过一系列的辗转处理后,最终会传递到Handler对象的handlerMessage()方法中。3)MessageQueueMessageQueue是消息队列的意思,它主要用来存放通过Handler发送的消息。通过Handler发送的消息会存在MessageQueue中等待处理。每个线程中只会有一个MessageQueue对象。4)LooperLooper是每个线程中的MessageQueue的管家。调用Looper的loop()方法后,就会循环检查MessageQueue中是否有消息,如果Mess

13、ageQueue中存在一条消息,就会将它取出,并传递到Handler的handlerMessage()方法中。此外每个线程也只会有一个Looper对象。在主线程中创建Handler对象时,系统已经为我们创建了Looper对象,所以不用手动创建Looper对象,而在子线程中创建Handler对象时,我们需要调用Looper.prepare()方法创建一个消息循环,最后调用 Looper.loop()使消息循环起作用,从消息队列中取消息,处理消息。2、 请问如何将 SQLite 数据库文件与 apk文件一起发布。可以将数据库文件(dictionary.db)复制到 Eclipse And

14、roid工程中的 res/raw 目录中。所在 res/raw 目录中的文件不会被编译成二进制文件,这样可以直接提取该目录中的文件。第4章 软件管家模块1、 请问Android中的dip、px和sp单位有何区别。1)dip: device independent pixels(设备独立像素),不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA推荐使用这个,不依赖像素。2)px: pixels(像素),屏幕上的点,不同设备显示效果相同,这是绝对像素,永远不会改变。一般我们HVGA代表320x480像素,这个用的比较多。3)sp: scaled pixels

15、(放大像素),主要用于显示字体的大小,与dp类似,但是可以根据用户的字体大小首选项进行缩放,主要用于字体显示best for text size。根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看TextView的源码可知 Android 默认使用 sp 作为字号单位。2、 请问注册广播有几种方式,这几种方式有何不同。 1)静态注册:在AndroidManifest.xml中注册广播,将广播注册到系统文件中,即使应用关闭,当有广播到来时广播也会收到消息进行处理。2)动态注册:在代码中注册和注销广播,当广播注册的所依赖界面关闭时,需要手动将广播注销掉。第5章 手

16、机杀毒模块 1、 请问StringBuffer和StringBuilder有哪些区别。1)StringBuffer:线程同步的,安全(可用于并发环境),效率低(少量数据看不出差别)。2)StringBuilder:线程不同步的,不能用于并发环境,如果使用可能会出现问题,但效率比较高。 2、 请问Android 中有几类动画,以及它们的特点是什么。Android中的动画通常可以分为逐帧动画和补间动画两类,具体特点如下:1) 补间动画(Tween Animation) 通过对View中的内容进行一系列的图形变换来实现动画效果,其中图形变化包括平移、缩放、旋转、改变透明度等。补间动画的效果可以通过X

17、ML文件来定义也可以通过编码方式来实现,通常情况下以XML形式定义的动画都会放置在程序的res/anim(自定义的)文件夹下。在Android中,提供了4种补间动画,分别是透明度渐变动画(AlphaAnimation)、旋转动画(RotateAnimation)、缩放动画(ScaleAnimation)、平移动画(TranslateAnimation)。2) 逐帧动画(Frame Animation)就是按顺序播放事先准备好的静态图像,利用人眼的“视觉暂留”原理,给用户造成动画的错觉。放胶片看电影的原理与逐帧动画的原理是一样的,它们都是一张一张地播放事先准备好的静态图像。第6章 缓存清理模块1

18、、 请问AIDL的工作原理以及实现步骤。AIDL全称Android Interface Definition Language(Android接口描述语言) 是一种接口描述语言。编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信的目的。实现AIDL的步骤如下:1) 创建AIDL文件(如IService.aidl):在这个文件中定义接口, 该接口定义了可供客户端访问的方法或属性。package cn.itcast.alipayservice;interface IService void callALiPayService();2) 编译AIDL文件:Eclipse可

19、以根据aidl文件自动生产Java文件并编译(如IService.java), 编译后的文件会在gen目录下,这个过程不需要人为控制。3) 实现IService接口:编写一个MyService类,MyService是Service的子类,在MyService类中定义了一个内嵌类(MyBinder),该类是IService.Stub的子类。public class MyService extends Service private static final String TAG = "ALiPayService"Overridepublic IBinder onBind(In

20、tent intent) Log.v(TAG, "绑定支付宝,准备付费"); return new MyBinder(); private class MyBinder extends IService.Stub Overridepublic void callALiPayService() methodInService(); 需要注意的是,onBind()方法必须返回MyBinder类的实例对象,否则客户端无法获得服务对象。另外还需要在清单文件中注册MyService服务。2、请问接口和抽象类有哪些区别。 l 抽象类中可以有构造方法,而接口中不能有构造方法。l 抽象类中

21、可以有普通成员变量,而接口中不能有普通成员变量。l 抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。l 抽象类中的抽象方法的访问类型可以是public,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。l 抽象类中可以包含静态方法,接口内不能包含静态方法。l 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。l 一个类可以实现多个接口,但只能继承一个抽象类

22、。第7章 进程管理模块1、 请问进程间通讯有几种方式。1)Activity:既可以在进程内访问(同一个应用程序),也可以跨进程访问。Activity跨进程访问与进程内访问略有不同,虽然他们都需要Intent对象,但跨进程访问并不需要指定Context对象和Activity的Class对象,而需要指定的是要访问Activity所对应的Action(一个字符串),有些还需要指定一个Uri。例如调用系统照相机就是通过Activity实现的进程间通信。2)广播(Broadcast):广播是一种被动的跨进程通通讯方式。当某个程序向系统发送广播时,其他的应用程序只能被动接收广播数据。这就像电台进行广播一样

23、,听众只能被动地收听,而不能主动与电台进行沟通。在应用程序中发送广播比较简单,只需要调用sendBroadcast()方法即可,该方法需要一个Intent对象,通过Intent对象可以发送需要的数据。3)Content Provider:提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据)应用程序可以利用Content Provider完成数据查询、数据修改、数据添加、数据删除功能。4)Service(服务):Service是Android系统中非常重要的一个组件,它可以脱离应用程序运行,也就是说,应用程序只起到一个启动Service的作用,一旦Service被启动,就算应用程序关闭,

24、Service仍然会在后台运行。Service有两个作用,后台运行和跨进程通信。当如果让程序可以跨进程通信,这就需要使用AIDL服务,AIDL 是Android接口定义语言,同这种语言定义的接口后,Eclipse插件(ODT)会自动生成相应的Java代码接口。并实现跨进程通信功能。2、 请问启动、停止Service有几种方式,各自有什么特点。 1)startService():调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。停止服务时要调用stopService()方法。2)bindService():调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。停止服务时要调用onUnb

25、ind()方法解绑。第8章 流量统计模块1、 请问使用SQLite数据库时有几种优化方式。1)索引优化:简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率。其优点是大大加快了数据库检索的速度,包括对单表查询、连表查询、分组查询、排序查询。经常是一到两个数量级的性能提升,且随着数据数量级增长。缺点是索引的创建和维护存在消耗,索引会占用物理空间,且随着数据量的增加而增加。在对数据库进行增删改时需要维护索引,所以会对增删改的性能存在影响。2)事务优化:对于需要一次性修改多条数据时,可以考虑使用SQLite中

26、的事务进行批量处理。3)查询优化:相对于封装过的ContentProvider而言,使用原始SQL语句执行效率高,例如使用方法rawQuery、execSQL的执行效率比较高。2、 请问Activity有几种启动模式,以及每种模式的特点。 1)standard:标准模式,一调用 startActivity()方法就会产生一个新的实例。2)singleTop:栈顶模式,如果已经有一个实例位于 Activity 栈的顶部时,就不产生新的实例,而只是调用Activity的newInstance()方法。如果不位于栈顶,就会产生一个新的实例。3)singleTask:单例任务模式,会在一个新的 Task 中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。4)singleInstance:单例模式,这个跟 singleTask 基本上是一样,但有一个区别,在这个模式下的 Activity 实例所处的 Task 中,只能有这个activity 实例,不能有其他的

温馨提示

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

评论

0/150

提交评论