Android面试题六

62.什么情况会导致Force close,如何避免,能否捕获导致其的异常。


抛出运行时异常就会导致Force close,比如空指针,数组越界,类型转换异常等等

避免:编写程序时,要思维缜密,在可能出现异常的地方都做相应的处理,增强程序的健壮性。

捕获:可以通过logcat查看抛出异常的代码出现的位置,然后到程序对应代码中进行修改。



63.android本身的api并未声明会抛出异常,则在其运行时有无可能抛出Runtime异常,你遇到过吗?若有的话会导致什么问题?如何解决?


会,如NullPointerException。 textView没有初始化时,却调用了其方法。

打开控制台,查看Logcat找出异常并修改。



64.IntentService有何优点?


IntentService使用队列的方式将请求的intent加入队列,然后开启一个工作线程来处理队列中的intent。对于异步的startService请求,intentservice会处理完成一个之后再处理第二个,每一个请求都会在一个单独的工作线程中处理,不会阻塞应用程序的主线程。


优点:

Activity的进程,当处理Intent的时候,会产生一个对应的service。

Android的进程处理器现在会尽可能的不kill你

非常容易使用



65.如何打开res/raw目录下的数据库文件

在Android中不能直接打开res/raw下的数据库文件,而需要在程序第一次启动时,将该文件复制到手机内存或SD卡的

某个目录下,然后再打开数据库文件。复制的基本方法是使用getResources().openRawResource()获得res/raw目录

中资源的InputStream对象,然后将该InputStream对象中的数据写到其它的目录中的相应文件中。


在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase()来打开任意目录中的SQLite数据库文件。



66.Android中引入广播机制的用意


(1)方便组件之间信息和数据的交互

(2)程序间互通消息(例如在自己的应用程序内监听系统来电)

(3)效率上

(4)设计模式上(反转控制的一种应用,类似监听者模式)



67.AIDL的全称是什么?如何工作?能处理哪些类型的数据?

AIDL全称是Android Interface Definition Language(Android接口定义语言)

是一种接口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用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的内部抽象类www.diannao114.cn,它继承扩展了接口并实现了远程调用需要的几个方法。接下来就需要自己去实现自定义的几个接口了.

4、向客户端提供接口ITaskBinder, 如果写的是service,扩展该Service并重载onBind ()方法来返回一个实现上述接口的类的实例。

5、在服务器端回调客户端的函数. 前提是当客户端获取的IBinder接口的时候,要去注册回调函数, 只有这样, 服务器端才知道该调用那些函数

 

AIDL语法很简单,可以用来声明一个带一个或多个方法的接口,也可以传递参数和返回值。 由于远程调用的需要, 这些参数和返回值并不是任何类型.下面是些AIDL支持的数据类型:

 

1. 不需要import声明的简单Java编程语言类型(int,boolean等)

 

2. String, CharSequence不需要特殊声明www.diannao114.cn

 

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.asInterface((IBinder)service)将参数转换为YourInterface类型。

 

5. 调用接口中定义的方法。你总要检测到DeadObjectException异常,该异常在连接断开时被抛出。它只会被远程方法抛出。

 

6. 断开连接,调用接口实例中的ApplicationContext.unbindService()




68.请解释下Android程序运行时权限与文件系统权限的区别

Android程序运行  是虚拟机Davlik(android授权)

文件系统    是linux内核授权



69.系统上安装了多种浏览器,能否指定某浏览器访问指定页面?


可以

只要指定intent.setClassName(packageName,activity);即可启动指定的浏览器



70.你如何评价Android系统,优缺点。


优点:开源特性,得到众多厂商支持;软件发展很快;界面UI、系统优化不错。

缺点:版本过多,升级过快;用户体验不一致。



71.DDMS和TraceView的区别


DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,TraceView是程序性能分析器。



72.谈谈Android的IPC机制

IPC是内部进程通信的简称,是共享“命名管道”的资源。Android中的IPC机制是为了让Activity和service之间可以随时地进行交互,故在Android中,该机制只适合于Activity和service之间的通信。通过定义AIDL接口文件来定义IPC接口,服务器端实现IPC接口,客户端调用IPC接口。



73.NDK是什么

NDK是一系列工具的集合。

NDK提供了一系列的工具,帮助开发者迅速开发c/c++的动态库,并能自动将so和java应用打成apk包。

NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU,平台,ABI等差异,开发人员只需简单的修改mk文件就可以创建出so。

NDK提供了一份稳定的,功能有限的API头文件声明。



74.Activity的几种启动模式


设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置android:launchMode属性

Activity启动方式有四种,分别是:

standard
singleTop
singleTask
singleInstance


standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。


singleTop
可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

singleTask
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值