android面试题及答案

让心放纵 分享 时间: 收藏本文

【简介】感谢网友“让心放纵”参与投稿,以下是小编为大家准备的android面试题及答案(共11篇),仅供参考,大家一起来看看吧。

篇1:android面试题及答案

1、是否进行过apk反编译,如何防止反编译

反编译:

Android反编译工具

· dex2jar + jdgui

· apktool

防止反编译:

· 代码加密

这方式,也只能想想,一旦你自己加密了,Android系统都不认识你了,还怎么运行?(如果有那估计就是eoe现在推的爱加密吧).

· 代码混淆

这种方式,其实我不大愿意将他归类于防止反编译,从Android、Java编译原理上来说,针对自身代码做混淆等操作,必然防止不了反编译这个事实。他能做到的就是将字符,函数等混淆成各种a,b,c,d,1,2,3等。

这种方式一般称为,

妨碍对反编译代码的阅读、观看和理解

Android中主要是针对 proguard.cfg 的配置来实现。

具体的实现网上针对这部分的解释已经太多,所以这里不详细介绍了。

· 动态加载类

这种方式的启发是根据web端来的。Web端你要防止,那就不发布呗。

所以我们可以将我们重要的源码,丢在服务器上,必要的时候通过DexClassLoader类去加载重要类。来防止核心代码被反编译。

具体可看DexClassLoader示例

· 用NDK开发核心代码

从上面已经能知道,C/C++等编译型语言的反汇编难度。所以我们可以放心的使用NDK去开发,生成SO库文件再来调用。

PS:部分资源文件若十分珍贵,可以通过 #include直接编译到库里(当然内存可能就大了),这种方式可以自己考虑。

2、Android的动画分类以及两种动画的阐述

Tween动画

又称“补间动画”、“中间动画”,最早接触Tween类是在学习Flash时候,使用ActionScript做动画的时候,使用过类Tween。

Tween动画主要的功能是在绘制动画前设置动画绘制的轨迹,包括时间, 位置 ,等等。但是Tween动画的缺点是它只能设置起始点与结束点的两帧,中间过程全部由系统帮我们完成。所以在帧数比较多的游戏开发中是不太会用到它的。

Tween一共提供了4中动画的效果

Scale:缩放动画

Rotate:旋转动画

Translate:移动动画

Alpha::透明渐变动画

Frame动画

又称帧动画,主要显示方式是为动画的总标签,这里面放着帧动画标签,也就是说若干标签的帧 组合在一起就是帧动画了。 标签中android:oneshot=“false”这是一个非常重要的属性,默认为false 表示 动画循环播放, 如果这里写true 则表示动画只播发一次。 标签中记录着每一帧的信息android:drawable=“@drawable/a”表示这一帧用的图片为“a”,下面以此类推。 android:duration=“100” 表示这一帧持续100毫秒,可以根据这个值来调节动画播放的速度。

3、AIDL全称,如何工作,可处理那些数据

答:AIDL的英文全称是Android Interface Define Language

当A进程要去调用B进程中的service时,并实现通信,我们通常都是通过AIDL来操作的

A工程:

首先我们在net.blogjava.mobile.aidlservice包中创建一个RemoteService.aidl文件,在里面我们自定义一个接口,含有方法get。ADT插件会在gen目录下自动生成一个RemoteService.java文件,该类中含有一个名为RemoteService.stub的内部类,该内部类中含有aidl文件接口的get方法。

说明一:aidl文件的位置不固定,可以任意

然后定义自己的MyService类,在MyService类中自定义一个内部类去继承RemoteService.stub这个内部类,实现get方法。在onBind方法中返回这个内部类的对象,系统会自动将这个对象封装成IBinder对象,传递给他的调用者。

其次需要在AndroidManifest.xml文件中配置MyService类,代码如下:

为什么要指定调用AIDL服务的ID,就是要告诉外界MyService这个类能够被别的进程访问,只要别的进程知道这个ID,正是有了这个ID,B工程才能找到A工程实现通信。

说明:AIDL并不需要权限

B工程:

首先我们要将A工程中生成的RemoteService.java文件拷贝到B工程中,在bindService方法中绑定aidl服务

绑定AIDL服务就是将RemoteService的ID作为intent的action参数。

说明:如果我们单独将RemoteService.aidl文件放在一个包里,那个在我们将gen目录下的该包拷贝到B工程中。如果我们将RemoteService.aidl文件和我们的其他类存放在一起,那么我们在B工程中就要建立相应的包,以保证RmoteService.java文件的报名正确,我们不能修改RemoteService.java文件

bindService(newInten(“net.blogjava.mobile.aidlservice.RemoteService”),serviceConnection,Context.BIND_AUTO_CREATE);

ServiceConnection的onServiceConnected(ComponentName name, IBinderservice)方法中的service参数就是A工程中MyService类中继承了RemoteService.stub类的内部类的对象。

4、Android系统中GC什么情况下不会出现内存泄露

1. 数据库的cursor没有关闭

2.构造adapter时,没有使用缓存contentview

衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3.Bitmap对象不使用时采用recycle释放内存

4.activity中的对象的生命周期大于activity

调试方法: DDMS==>HEAPSZIE==>dataobject==>[TotalSize]

5、什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?

答:一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误

篇2:android面试题及答案

在android中,请简述jni的调用过程。

1)安装和下载Cygwin,下载 Android NDK

2)在ndk项目中JNI接口的设计

3)使用C/C++实现本地方法

4)JNI生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

简述Android应用程序结构是哪些?

Android应用程序结构是:

Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application

Framework(开发框架包)、Applications (核心应用程序)

如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

onSaveInstanceState

当你的程序中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完成以后又会来找A,这个时候就有两种情况:一是A被回收,二是A没有被回收,被回收的A就要重新调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接执行onResume(),跳过onCreate()了。

如何将一个Activity设置成窗口的样式。

在AndroidManifest.xml 中定义Activity的地方一句话android:theme=“@android:style/Theme.Dialog”或android:theme=“@android:style/Theme.Translucent”就变成半透明的

请介绍下Android中常用的五种布局。

FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)

请介绍下Android的数据存储方式。

一.SharedPreferences方式

二.文件存储方式

三.SQLite数据库方式

四.内容提供器(Content provider)方式

五. 网络存储方式

请介绍下ContentProvider是如何实现数据共享的。

创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。

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

运行时权限Dalvik( android授权)

文件系统 linux 内核授权

系统上安装了多种浏览器,能否指定某浏览器访问指定页面面?请说明原由。

通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?

答:一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误

IntentService有何优点?

答:IntentService 的好处

* Acitivity的进程,当处理Intent的时候,会产生一个对应的Service

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

* 非常容易使用

横竖屏切换时候activity的生命周期?

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

2、设置Activity的android:configChanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

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

解答:可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到res aw目录中

1.android面试题及答案

2.软件测试android面试题及答案

3.android面试题

4.最新最全Android 面试题

5.20最新android面试题

6.android高级面试题

7.android面试题目汇总

8.android面试题大全

9.android面试题

10.70道Android面试题(大全)

篇3:android面试题及答案

1. 下列哪些语句关于内存回收的说明是正确的? (b )

A、程序员必须创建一个线程来释放内存

B、内存回收程序负责释放无用内存

C、内存回收程序允许程序员直接释放内存

D、内存回收程序可以在指定的时间释放内存对象

2. 下面异常是属于Runtime Exception 的是(abcd)(多选)

A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

3. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c).

c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12

4. 下列程序段的输出结果是:(b )

void complicatedexpression_r(){

int x=20, y=30;

boolean b;

b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;

System.out.println(b);

}

A、true B、false C、1 D、011.activity

5. 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d)

A、onPause() B、onCreate() C、onResume() D、onStart()

6. Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)

A、Serializable B、charsequence C、Parcelable D、Bundle

7. android 中下列属于Intent的作用的是(c)

A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失

C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带

D、处理一个应用程序整体性的工作

8. 下列属于SAX解析xml文件的优点的是(b)

A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能

B、不用事先调入整个文档,占用资源少

C、整个文档调入内存,浪费时间和空间

D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会

消失

9. 下面的对自定style的方式正确的是(a)

A、

B、

C、

fill_parent

D、

fill_parent

10. 在android中使用Menu时可能需要重写的方法有(ac)。(多选)

A、onCreateOptionsMenu()

B、onCreateMenu()

C、onOptionsItemSelected()

D、onItemSelected()

11. 在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。 SELECT @@IDENTITY

A、可能为0.1

B、可能为3

C、不可能为-100

D、肯定为0

12. 在SQL Server 中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(d)。

BEGIN TRANSACTION A

Update SALES Set qty=30 WHERE qty<30

BEGIN TRANSACTION B

Update SALES Set qty=40 WHEREqty<40

Update SALES Set qty=50 WHEREqty<50

Update SALES Set qty=60 WHEREqty<60

COMMIT TRANSACTION B

COMMIT TRANSACTION A

A、SALES表中qty列最小值大于等于30

B、SALES表中qty列最小值大于等于40

C、SALES表中qty列的数据全部为50

D、SALES表中qty列最小值大于等于60

13. 在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab)

A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

14. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)

A、当第一次启动的时候先后调用onCreate()和onStart()方法

B、当第一次启动的时候只会调用onCreate()方法

C、如果service已经启动,将先后调用onCreate()和onStart()方法

D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法

15. 下面是属于GLSurFaceView特性的是(abc)(多选)

A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图

view上。

B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

C、让渲染器在独立的线程里运作,和UI线程分离。

D、可以直接从内存或者DMA等硬件接口取得图像数据

16. 下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的(a)

A、

android:name=“android.provider.action.NewBroad”/>

B、

android:name=“android.provider.action.NewBroad”/>

C、

android:name=“android.provider.action.NewBroad”/>

D、

android:name=“android.provider.action.NewBroad”/>

17. 关于ContenValues类说法正确的是(a)

A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是String类型,而值都是基本类型

B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是任意类型,而值都是基本类型

C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名,可以为空,而值都是String类型

D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中

的名是String类型,而值也是String类型

18. 我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(a)

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

19. 下面退出Activity错误的方法是(c)

A、finish()

B、抛异常强制退出

C、System.exit()

D、onStop()

20. 下面属于android的动画分类的有(ab)(多项)

A、Tween B、Frame C、Draw D、Animation

21. 下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d)

A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.

B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.

C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux中的一个进程,所以说不是一个概念.

D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.

22. Android项目工程下面的assets目录的作用是什么b

A、放置应用到的图片资源。

B、主要放置多媒体等数据文件

C、放置字符串,颜色,数组等常量数据

D、放置一些与UI相应的布局文件,都是xml文件

23. 关于res/raw目录说法正确的是(a)

A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式

B、这里的文件是原封不动的存储到设备上会转换为二进制的格式

C、这里的文件最终以二进制的格式存储到指定的包中

D、这里的文件最终不会以二进制的格式存储到指定的包中

24. 下列对android NDK的理解正确的是(abcd )

、A、NDK是一系列工具的集合

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

C、使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式

D、NDK 将是 Android平台支持 C 开发的开端

二.填空题

25. android中常用的四个布局是framlayout,linenarlayout,relativelayout和tablelayout。26. android 的四大组件是activiey,service,broadcast和contentprovide。27. java.io包中的objectinputstream和objectoutputstream类主要用于对对象(Object)的读写。28. android 中service的实现方法是:startservice和bindservice。29. activity一般会重载7个方法用来维护其生命周期,除了onCreate(),onStart(),onDestory() 外还有onrestart,onresume,onpause,onstop。30. android的数据存储的方式sharedpreference,文件,SQlite,contentprovider,网络。31. 当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行的回调函数是startActivityResult()。32. 请使用命令行的方式创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下,名字为scard.img,并指定屏幕大小HVGA.____________________________________。33. 程序运行的结果是:_____good and gbc__________。 public classExample{

String str=new String(“good”);

char[]ch={'a','b','c'};

public static void main(String args[]){

Example ex=new Example();

ex.change(

[android面试题及答案]

篇4:android面试题及答案

android面试题及答案

在android中,请简述jni的调用过程。

1)安装和下载cygwin,下载 android ndk

2)在ndk项目中jni接口的设计

3)使用c/c++实现本地方法

4)jni生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

简述android应用程序结构是哪些?

android应用程序结构是:

linux kernel(linux内核)、libraries(系统运行库或者是c/c++核心库)、application

framework(开发框架包)、applications (核心应用程序)

如果后台的activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

onsaveinstancestate

当你的程序中某一个activity a在运行时,主动或被动地运行另一个新的activity b,这个时候a会执行onsaveinstancestate()。b完成以后又会来找a,这个时候就有两种情况:一是a被回收,二是a没有被回收,被回收的a就要重新调用oncreate()方法,不同于直接启动的是这回oncreate()里是带上了参数savedinstancestate;而没被收回的就直接执行onresume(),跳过oncreate()了。

如何将一个activity设置成窗口的样式。

在androidmanifest.xml 中定义activity的地方一句话android:theme=“@android:style/theme.dialog”或android:theme=“@android:style/theme.translucent”就变成半透明的

请介绍下android中常用的五种布局。

framelayout(框架布局),linearlayout (线性布局),absolutelayout(绝对布局),relativelayout(相对布局),tablelayout(表格布局)

请介绍下android的数据存储方式。

一.sharedpreferences方式

二.文件存储方式

三.sqlite数据库方式

四.内容提供器(content provider)方式

五. 网络存储方式

请介绍下contentprovider是如何实现数据共享的。

创建一个属于你自己的content provider或者将你的数据添加到一个已经存在的`content provider中,前提是有相同数据类型并且有写入content provider的权限。

请解释下android程序运行时权限与文件系统权限的区别。

运行时权限dalvik( android授权)

文件系统 linux 内核授权

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

通过直接发送uri把参数带过去,或者通过manifest里的intentfilter里的data属性

什么情况会导致force close ?如何避免?能否捕获导致其的异常?

答:一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误

intentservice有何优点?

答:intentservice 的好处

* acitivity的进程,当处理intent的时候,会产生一个对应的service

* android的进程处理器现在会尽可能的不kill掉你

* 非常容易使用

横竖屏切换时候activity的生命周期?

1、不设置activity的android:configchanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置activity的android:configchanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置activity的android:configchanges=“orientation|keyboardhidden”时,切屏不会重新调用各个生命周期,只会执行onconfigurationchanged方法

篇5:软件测试android面试题及答案

请介绍下Android的数据存储方式。

一.SharedPreferences方式

二.文件存储方式

三.SQLite数据库方式

四.内容提供器(Content provider)方式

五. 网络存储方式

请介绍下ContentProvider是如何实现数据共享的。

创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。

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

运行时权限Dalvik( android授权)

文件系统 linux 内核授权

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

通过直接发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?

答:一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误

IntentService有何优点?

答:IntentService 的好处

* Acitivity的进程,当处理Intent的时候,会产生一个对应的Service

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

* 非常容易使用

横竖屏切换时候activity的生命周期?

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

2、设置Activity的android:configChanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

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

解答:可以将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。可以将dictionary.db文件复制到res aw目录中

篇6:Android面试题附答案

一、选择题(30题,每题1.5分,共45分)

1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(c),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(g)

A、输入流和输出流 B、字节流和字符流 C、节点流和处理流

D、File stream E、Pipe stream F、Random stream G、Filter stream

2.下列代码的执行结果是:(b)

public class Test3{

public static void main(String args[]){

System.out.print(100%3);

System.out.print(“,”);

System.out.println(100%3.0);

}

}

A、1,1

B、1,1.0

C、1.0,1

D、1.0,1.0

3.在继承中,关于构造方法的说明,下列说法错误的是(d)

A、子类无条件的继承父类的无参构造方法,

B、子类可以引用父类中的有参构造方法,使用super关键字,

C、如果子类没有构造方法,则父类无参构造方法作为自已的构造方法,

D、如果子类有无参构造方法,而父类的无参构造方法则被覆盖。

4.以下程序的运行结果为( b)

public class IfTest{

public static void main(String args[]){

int x=3;

int y=1;

if(x==y)

System.out.println(“Not equal”);

else

System.out.println(“Equal”);

}

}

A、Not equal B、Equal C、无输出 D、编译出错

5.Java语言中字符串“学Java”所占的内存空间是(a)

A. 6个字节

B. 7个字节

C. 10个字节

D. 11个字节

6.关于下列程序段的输出结果,说法正确的是:(d )

public class MyClass{

static int i;

public static void main(String argv[]){

System.out.println(i);

}

}

A、有错误,变量i没有初始化。

B、null

C、1

D、0

7.下列哪些语句关于内存回收的说明是正确的? (b )

A、程序员必须创建一个线程来释放内存

B、内存回收程序负责释放无用内存

C、内存回收程序允许程序员直接释放内存

D、内存回收程序可以在指定的时间释放内存对象

8.下面异常是属于Runtime Exception 的是(abcd)(多选)

A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

9. Math.round(11.5)等于多少. Math.round(-11.5)等于多少(c). c

A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12

10.下列程序段的输出结果是:(b )

void complicatedexpression_r(){

int x=20, y=30;

boolean b;

b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;

System.out.println(b);

}

A、true B、false C、1 D、0

11.activity对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d)

A、onPause() B、onCreate() C、onResume() D、onStart()

12.Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)

A、Serializable B、charsequence C、Parcelable D、Bundle

13.android 中下列属于Intent的作用的是(c)

A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失

C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带

D、处理一个应用程序整体性的工作

14.下列属于SAX解析xml文件的优点的是(b)

A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能

B、不用事先调入整个文档,占用资源少

C、整个文档调入内存,浪费时间和空间

D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会

消失

15.下面的对自定style的方式正确的是(a)

A、

B、

C、

fill_parent

D、

16.在android中使用Menu时可能需要重写的方法有(ac)。(多选)

A、onCreateOptionsMenu()

B、onCreateMenu()

C、onOptionsItemSelected()

D、onItemSelected()

17.在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。

SELECT @@IDENTITY

A、可能为0.1

B、可能为3

C、不可能为-100

D、肯定为0

18.在SQL Server 中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(d)。

BEGIN TRANSACTION A

Update SALES Set qty=30 WHERE qty<30

BEGIN TRANSACTION B

Update SALES Set qty=40 WHERE qty<40

Update SALES Set qty=50 WHERE qty<50

Update SALES Set qty=60 WHERE qty<60

COMMIT TRANSACTION B

COMMIT TRANSACTION A

A、SALES表中qty列最小值大于等于30

B、SALES表中qty列最小值大于等于40

C、SALES表中qty列的数据全部为50

D、SALES表中qty列最小值大于等于60

19.在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数 据库版本进行管理的方法可以是(ab)

A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

20. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)

A、当第一次启动的时候先后调用onCreate()和onStart()方法

B、当第一次启动的时候只会调用onCreate()方法

C、如果service已经启动,将先后调用onCreate()和onStart()方法

D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法

21.下面是属于GLSurFaceView特性的是(abc)(多选)

A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图

view上。

B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

C、让渲染器在独立的线程里运作,和UI线程分离。

D、可以直接从内存或者DMA等硬件接口取得图像数据

22.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(a)

A、

android:name=“android.provider.action.NewBroad”/>

B、

android:name=”android.provider.action.NewBroad”/>

C、

android:name=“android.provider.action.NewBroad”/>

D、

android:name=”android.provider.action.NewBroad”/>

23.关于ContenValues类说法正确的是(a)

A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是String类型,而值都是基本类型

B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名是任意类型,而值都是基本类型

C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

名,可以为空,而值都是String类型

D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中

的名是String类型,而值也是String类型

24.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器

就会变得越慢,那么线程销毁的方法是(a)

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

25.下面退出Activity错误的方法是(c)

A、finish()

B、抛异常强制退出

C、System.exit()

D、onStop()

26.下面属于android的动画分类的有(ab)(多项)

A、Tween B、Frame C、Draw D、Animation

27.下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d)

A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立

的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.

B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立

的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.

C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的

Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.

D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的

Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.

28.Android项目工程下面的assets目录的作用是什么b

A、放置应用到的图片资源。

B、主要放置多媒体等数据文件

C、放置字符串,颜色,数组等常量数据

D、放置一些与UI相应的布局文件,都是xml文件

29..关于res/raw目录说法正确的是(a

A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式

B、这里的文件是原封不动的存储到设备上会转换为二进制的格式

C、这里的文件最终以二进制的格式存储到指定的包中

D、这里的文件最终不会以二进制的格式存储到指定的包中

30.下列对android NDK的理解正确的是(abcd )

A、NDK是一系列工具的集合

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

C、使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式

D、NDK 将是 Android平台支持 C 开发的开端

二.填空题(每题2分,共20分)

1.我们用___int____来定义一个整数,用___char____来定义一个字符类型,称为原始数据类型。

2.android中常用的四个布局是framlayout,linenarlayout,relativelayout和tablelayout。

3.android 的四大组件是activiey,service,broadcast和contentprovide。

4.java.io包中的objectinputstream和objectoutputstream类主要用于对对象(Object)的读写。

5.android 中service的实现方法是:startservice和bindservice。

6.activity一般会重载7个方法用来维护其生命周期,除了onCreate(),onStart(),onDestory() 外还有onrestart,onresume,onpause,onstop。

7.android的数据存储的方式sharedpreference,文件,SQlite,contentprovider,网络。

8.当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activity来执行

的回调函数是startActivityResult()。

9.请使用命令行的方式创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下,

名字为scard.img, 并指定屏幕大小HVGA.____________________________________。

10.程序运行的结果是:_____good and gbc__________。

public class Example{

String str=new String(“good”);

char[]ch={‘a’,b’,c’};

public static void main(String args[]){

Example ex=new Example();

ex.change(ex.str,ex.ch);

System.out.print(ex.str+” and “);

Sytem.out.print(ex.ch);

}

public void change(String str,char ch[]){

str=”test ok”;

ch[0]=’g;

}

}

三 简答编程题(共35分)

1.在android中,请简述jni的调用过程。(8分)

1)安装和下载Cygwin,下载 Android NDK

2)在ndk项目中JNI接口的设计

3)使用C/C++实现本地方法

4)JNI生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

2.简述Android应用程序结构是哪些?(7分)

Android应用程序结构是:

Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application

Framework(开发框架包)、Applications (核心应用程序)

3. 请继承SQLiteOpenHelper实现:(10分)

1).创建一个版本为1的“diaryOpenHelper.db”的数据库,

2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100

长度, content字符型1000长度)

3).在数据库版本变化时请删除diary表,并重新创建出diary表。

public class DBHelper extends SQLiteOpenHelper {

public final static String DATABASENAME = “diaryOpenHelper.db”;

public final static int DATABASEVERSION = 1;

//创建数据库

public DBHelper(Context context,String name,CursorFactory factory,int version)

{

super(context, name, factory, version);

}

//创建表等机构性文件

public void onCreate(SQLiteDatabase db)

{

String sql =”create table diary”+

“(“+

“_id integer primary key autoincrement,”+

“topic varchar(100),”+

“content varchar(1000)”+

“)”;

db.execSQL(sql);

}

//若数据库版本有更新,则调用此方法

public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

{

String sql = “drop table if exists diary”;

db.execSQL(sql);

this.onCreate(db);

}

}

4.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度

显示工作。(10分)

答案

public class ProgressBarStu extends Activity {

private ProgressBar progressBar = null;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.progressbar);

//从这到下是关键

progressBar = (ProgressBar)findViewById(R.id.progressBar);

Thread thread = new Thread(new Runnable() {

@Override

public void run() {

int progressBarMax = progressBar.getMax();

try {

while(progressBarMax!=progressBar.getProgress())

{

int stepProgress = progressBarMax/10;

int currentprogress = progressBar.getProgress();

progressBar.setProgress(currentprogress+stepProgress);

Thread.sleep(1000);

}

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

});

thread.start();

//关键结束

}

}

答案:

一、选择题

1 2 3 4 5 6 7 8 9 10

CG B D B A D B ABCD C B

11 12 13 14 15 16 17 18 19 20

D ABCD C B A AC C D AB AD

21 22 23 24 25 26 27 28 29 30

ABC A A A C AB D B A ABCD

二、填空题

1. int char

2.FrameLayout,LilnearLayout,RelativeLayout,TableLayout

3.Activity,Broadcast,Service,ContentProvide

4.ObjectInputStream ObjectOutputSteam

5.startService ,bindService

6.onRestart(),onResume(),onPause(),onStop()

7.SharedPreferences存储,文件存储,SQLite存储,ContentProvider,网络存储

8.startActivityResult()

9.adnroid create acd -n myAvd -t 8 -s HVDA – C d:\\card.img

10.good and gbc

篇7:android面试题

private TextView view_result;

private TextView view_suggest;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

findViews();

setListensers();

}

// 定义

private void findViews() {

button_calc = (Button) findViewById(R.id.submit);

field_height = (EditText) findViewById(R.id.height);

field_weight = (EditText) findViewById(R.id.weight);

view_result = (TextView) findViewById(R.id.result);

view_suggest = (TextView) findViewById(R.id.suggest);

}

// Listen for button clicks

private void setListeners() {

calcbutton.setOnClickListener(calcBMI);

}

private Button.OnClickListener calcBMI = new Button.OnClickListener() {

public void onClick(View v) {

DecimalFormat nf = new DecimalFormat(“0.0”);

double height = Double.parseDouble(field_height.getText().toString()) / 100;

double weight = Double.parseDouble(field_weight.getText().toString());

double BMI = weight / (height * height);

// Present result

view_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

// Give health advice

if (BMI >25) {

view_suggest.setText(R.string.advice_heavy);

} else if (BMI < 20) {

view_suggest.setText(R.string.advice_light);

} else {

view_suggest.setText(R.string.advice_average);

}

}

};

}

总结:

关于项目

在就是你项目经验,一定要突出你遇到什么难点,然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,

心态:

什么样的面试官都有,去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实。一个人的交谈能力也很重要,总之不是非常标准的普通话, 最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底,这样你获得offer的机会更大,谈工资也有优势~~

篇8:android面试题

Intent intent = new Intent(this,B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

局限性 :所有的activity的启动模式都要是默认的启动模式

讲一讲你对activity的理解

把上面的几点用自己的心得写出来

8. service是否在main thread中执行, service里面是否能执行耗时的操作?

默认情况,如果没有显示的指定service所运行的进程, Service和activity是运行在当前app所在进程的main thread(UI主线程)里面

service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件 )

在子线程中执行 new Thread{}.start();

特殊情况 ,可以在清单文件配置 service 执行所在的进程 ,让service在另外的进程中执行

9. 两个Activity之间怎么传递数据?

基本数据类型可以通过. Intent 传递数据

extras.putDouble(key, value)

intent.putExtra(name, value)

// 通过intent putExtra 方法 基本数据类型 都传递

Bundle bundle = new Bundle();

bumdle.putShort(key, value);

intent.putExtras(bundle);

intent.putExtras(bundle)

获取到激活他的 getIntent();

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

intent.getStringExtra(“key”,“value”);

intent.getBooleanExtra(“key”,“value”)

Application 全局里面存放 对象 ,自己去实现自己的application的这个类,基础系统的application , 每个activity都可以取到

让对象实现 implements Serializable 接口把对象存放到文件上.

让类实现Serializable 接口,然后可以通过 ObjectOutputStream //对象输出流

File file = new File(“c:\\\\1.obj”);

FileOutputStream fos = new FileOutputStream(file);

ObjectOutputStream oos = new ObjectOutputStream(fos);

Student stu = new Student();

stu.setId(“10001”);

stu.setName(“zs”);

oos.writeObject(stu);

FileInputStream fis = new FileInputStream(file);

ObjectInputStream ois = new ObjectInputStream(fis);

Student stu1 = (Student) ois.readObject();

System.out.println(stu1.getName());

Parcelable 和 Serializable

Parcelable 把对象序列化到android操作系统 的一块公用的内存空间

文件/网络

intent.setData(Uri)

Uri.fromFile(); //大图片的传递

contentResolver.getInputStream(url);

10. 怎么让在启动一个Activity是就启动一个service?

在activity的onCreate()方法里面 startService();

11. 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中?

比方说在激活一个新的activity时候, 给intent设置flag

Intent的flag添加FLAG_ACTIVITY_NEW_TASK

这个被激活的activity就会在新的task栈里面…

Intent intent = new Intent(A.this,B.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

12. Activity怎么和service绑定,怎么在activity中启动自己对应的service?

startService() 一旦被创建 调用着无关 没法使用service里面的方法

bindService () 把service 与调用者绑定 ,如果调用者被销毁, service会销毁

bindService() 我们可以使用service 里面的方法

bindService(). 让activity能够访问到 service里面的方法

构建一个intent对象,

Intent service = new Intent(this,MyService.class);

通过bindService的方法去启动一个服务,

bindService(intent, new MyConn(), BIND_AUTO_CREATE);

ServiceConnection 对象(重写onServiceConnected和OnServiceDisconnected方法) 和BIND_AUTO_CREATE.

private class myconn implements ServiceConnection

{

public void onServiceConnected(ComponentName name, IBinder service) {

// TODO Auto-generated method stub

//可以通过IBinder的对象 去使用service里面的方法

}

public void onServiceDisconnected(ComponentName name) {

// TODO Auto-generated method stub

}

13. 14 .什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service?

在Service的生命周期中,被回调的方法比Activity少一些,只有onCreate, onStart, onDestroy,

onBind和onUnbind。

通常有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1 通过startService

Service会经历 onCreate 到onStart,然后处于运行状态,stopService的时候调用onDestroy方法。

如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。

2 通过bindService

Service会运行onCreate,然后是调用onBind, 这个时候调用者和Service绑定在一起。调用者退出了,Srevice就会调用onUnbind->onDestroyed方法。

所谓绑定在一起就共存亡了。调用者也可以通过调用unbindService方法来停止服务,这时候Srevice就会调用onUnbind->onDestroyed方法。

篇9:android面试题

如果后台的activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?

如何将一个activity设置成窗口的样式。(edited by sodino)

如何退出activity?如何安全退出已调用多个activity的application?

请介绍下android中常用的五种布局。

请介绍下android的数据存储方式。(edited by sodino)

请介绍下contentprovider是如何实现数据共享的。(edited by sodino)

如何启用service,如何停用service。(edited by sodino)

注册广播有几种方式,这些方式有何优缺点?请谈谈android引入广播机制的用意。

请解释下在单线程模型中message、handler、message queue、looper之间的关系。

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

请解释下android程序运行时权限与文件系统权限的区别。(edited by sodino)

系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。

嵌入式操作系统内存管理有哪几种,各有何特性 ?

页式,段式,段页,用到了mmu,虚拟空间等技术

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

嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工业控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。又可分为软实时和硬实时两种,而android是基于linux内核的,因此属于软实时。

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

中文70(包括标点),英文160个字节

android中的动画有哪几类,它们的特点和区别是什么?

两种,一种是tween动画、还有一种是frame动画。tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

handler机制的原理

andriod提供了 handler 和 looper 来满足线程间的通信。handler 先进先出原则。looper类用来管理特定线程内对象之间的消息交换(message exchange)。 1)looper: 一个线程可以产生一个looper对象,由它来管理此线程里的message queue(消息队列)。 2)handler: 你可以构造handler对象来与looper沟通,以便push新消息到message queue里;或者接收looper从message queue取出)所送来的消息。 3) message queue(消息队列):用来存放线程放入的消息。 4)线程:ui thread 通常就是main thread,而android启动程序时会替它建立一个message queue。

说说mvc模式的原理,

它在android中的运用 mvc(model_view_contraller)” 模型_视图_控制器”。 mvc应用程序总是由这三个部分组成。event(事件)导致controller改变model或view,或者同时改变两者。只要 controller改变了models的数据或者属性,所有依赖的view都会自动更新。类似的,只要controller改变了view,view会 从潜在的model中获取数据来刷新自己

(view重绘和内存泄露面试经常问的问题 )

view的刷新:

在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate。

可以调用invalidate()和postinvalidate()这两个方法刷新

gc内存泄露 出现情况:

1).数据库的cursor没有关闭

2).构造adapter时,没有使用缓存contentview 衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3).bitmap对象不使用时采用recycle()释放内存

4).activity中的对象的生命周期大于activity 调试方法: ddms==>heapszie==>dataobject==>[total size]

篇10:android面试题

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

中文70(包括标点),英文160个字节

android中的动画有哪几类,它们的特点和区别是什么?

两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

handler机制的原理

andriod提供了 Handler 和 Looper 来满足线程间的通信。Handler 先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 2)Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。 3) Message Queue(消息队列):用来存放线程放入的消息。 4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

说说mvc模式的原理,

它在android中的运用 MVC(Model_view_contraller)” 模型_视图_控制器”。 MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要 Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会 从潜在的Model中获取数据来刷新自己

(View重绘和内存泄露面试经常问的问题 )

View的刷新:

在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate。

可以调用invalidate和postInvalidate()这两个方法刷新

GC内存泄露 出现情况:

1).数据库的cursor没有关闭

2).构造adapter时,没有使用缓存contentview 衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/

3).Bitmap对象不使用时采用recycle()释放内存

4).activity中的对象的生命周期大于activity 调试方法: DDMS==>HEAPSZIE==>dataobject==>[Total Size]

篇11:android面试题

需要注意的是如果这几个方法交织在一起的话,会出现什么情况呢?

一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又bindService,Service只被创建一次。

如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。

如果service运行期间调用了bindService,这时候再调用stopService的话,service是不会调用onDestroy方法的,service就stop不掉了,只能调用UnbindService, service就会被销毁

如果一个service通过startService 被start之后,多次调用startService 的话,service会多次调用onStart方法。多次调用stopService的话,service只会调用一次onDestroyed方法。

如果一个service通过bindService被start之后,多次调用bindService的话,service只会调用一次onBind方法。

多次调用unbindService的话会抛出异常。

15. 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?

这个问题问的很山寨.默认不做任何处理,B里面的音乐都能播放.

遇到问题, 可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解()

A开启B的时候,用startActivityForResult()方法, B返回的时候把播放的状态信息返回给A ,A继续播放音乐.

16. 什么是IntentService?有何优点?

普通的service ,默认运行在ui main 主线程

Sdk给我们提供的方便的,带有异步处理的service类,

异步处理的方法 OnHandleIntent()

OnHandleIntent() 处理耗时的操作

17. 什么时候使用Service?

拥有service的进程具有较高的优先级

官方文档告诉我们,Android系统会尽量保持拥有service的进程运行,只要在该service已经被启动(start)或者客户端连接(bindService)到它。当内存不足时,需要保持,拥有service的进程具有较高的优先级。

1. 如果service正在调用onCreate, onStartCommand或者onDestory方法,那么用于当前service的进程相当于前台进程以避免被killed。

2. 如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.

3. 如果客户端已经连接到service (bindService),那么拥有Service的进程则拥有最高的优先级,可以认为service是可见的。

4. 如果service可以使用startForeground(true)方法来将service设置为前台状态,那么系统就认为是对用户可见的,并不会在内存不足时killed。

如果有其他的应用组件作为Service,Activity等运行在相同的进程中,那么将会增加该进程的重要性。

1.Service的特点可以让他在后台一直运行,可以在service里面创建线程去完成耗时的操作. 天气预报 widget TimerTask Timer 定期执行timertask

2.Broadcast receiver捕获到一个事件之后,可以起一个service来完成一个耗时的操作.

Broadcast receiver生命周期 和 响应时间很短

3.远程的service如果被启动起来,可以被多次bind, 但不会重新create. 索爱手机X10i的人脸识别的service可以被图库使用,可以被摄像机,照相机等程序使用.

18. 请描述一下Intent 和 Intent Filter。

Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。

通过Intent 可以实现各种系统组件的调用与激活.

Intent filter: 可以理解为邮局或者是一个信笺的分拣系统…

这个分拣系统通过3个参数来识别

Action: 动作 view

Data: 数据uri uri

Category : 而外的附加信息

Action 匹配

Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:

……

如果我们在启动一个 Activity 时使用这样的 Intent 对象:

Intent intent =new Intent();

intent.setAction(“cn.itcast.action”);

那么所有的 Action 列表中包含了“cn.itcast”的 Activity 都将会匹配成功。

Android 预定义了一系列的 Action 分别表示特定的系统动作。这些 Action 通过常量的方式定义在 android.content. Intent中,以“ACTION_”开头。我们可以在 Android 提供的文档中找到它们的详细说明。

URI 数据匹配

一个 Intent 可以通过 URI 携带外部数据给目标组件。在 节点中,通过 节点匹配外部数据。

mimeType 属性指定携带外部数据的数据类型,scheme 指定协议,host、port、path 指定数据的位置、端口、和路径。如下:

android:host=“host” android:port=“port” android:path=“path”/>

电话的uri tel: 12345

www.baidu.com

自己定义的uri itcast://cn.itcast/person/10

如果在 Intent Filter 中指定了这些属性,那么只有所有的属性都匹配成功时 URI 数据匹配才会成功。

Category 类别匹配

节点中可以为组件定义一个 Category 类别列表,当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功。

默认是DEFAULT

相关专题 面试题答案