搜档网
当前位置:搜档网 › Android高薪面试题集

Android高薪面试题集

Android高薪面试题集
Android高薪面试题集

目录

1、方法重载与覆盖的区别?( Overload与Override的区别) (3)

2、String 和StringBuffer的区别 (3)

3、字符串“abcde”通过写一个函数不让调用第三方的字符串,实现一个字符串倒序,比如字符串“abcde” 变成“edcba” (3)

4、抽象类与接口的区别(abstract与interface的区别) (3)

5、集合的实现类与区别? (3)

6、线程有几种状态,分别是哪些?(调用run()和调用start()的区别) (3)

7、线程的实现方式 (4)

8、sleep() 与wait()的区别 (4)

9、线程中wait,join,sleep,yield, notify,notifyall,synchronized,区别及联系 (4)

10、Final、finally、finanlize()的区别 (5)

11、常用设计模式及应用场景,用两种方式实现单例模式,要求线程安全? (5)

12、常用排序算法,时间复杂度,实现思路 (5)

13、android系统架构? (6)

14、Activity生命周期?保存activity的一些信息在哪个生命周期方法中? (6)

15、Activity的onSaveInstanceState() 和onRestoreInstanceState() (6)

16、Android的四大组件是什么?它们的作用是什么? (6)

17、广播如何调用,有什么方式,各自的区别? (7)

18、Android中asset文件夹和raw文件夹区别? (7)

19、Android中的五种存储方式及其应用场景 (7)

20、什么是ANR 如何避免它?(Android线程间的通信方式? ) (8)

21、Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系) . 8

22、listview优化策略? (8)

23、ListView分页加载实现思路? (8)

24、ListView图片异步加载实现思路? (8)

25、Intent的原理,作用,可以传递哪些类型的参数? (9)

26、如何实现屏幕分辨率的自适应? (9)

27、简述Android中的IPC机制 (9)

28、Android程序入口如何判断? (9)

29、android哪几种方式访问网络? (9)

30、说说HttpClient的通信过程 (9)

31、移动互联数据交互格式有哪些及其区别?(Json与xml的区别?) (10)

32、XML解析有哪几种?各自优缺点,官方推荐使用哪种? (10)

33、百度地图核心类,及实现的功能? (10)

34、GC内存泄露在什么情况下回出现?怎么解决? (10)

35、android内存的优化 (10)

36、加载大图片的时候如何防止内存溢出 (11)

37、Android缓存机制 (11)

38、如何实现消息推送,有哪些方式,各自优缺点,最常使用哪种? (11)

39、MVC在Android中的应用 (12)

40、Android自定义组件实现思路 (12)

41、版本更新的实现思路 (12)

42、播放视频有哪些实现方式? (12)

43、NDK开发流程?(JNI运行原理) (12)

44、如何实现一键退出? (13)

45、AndroidManifest.xml清单文件标签中属性android:excludeFromRecents="true" android:screenOrientation="portrait" android:configChanges="orientation|locale"的含义 (13)

46、如何将一个Activity设置成窗口的样式 (13)

47、谈谈UI中,Padding和Margin有什么区别,gravity与layout_gravity的区别 (13)

48、哪个组件可以实现手风琴效果,用来实现设置界面的类,实现抽屉效果, 悬浮窗口? (13)

49、Android SDK 3.0(HoneyComb)及4.0(Ice Cream)新特性 (13)

50、android客户端如何实现自动登录 (13)

1、方法重载与覆盖的区别?( Overload与Override的区别)

答: 方法的重载属于编译时多态,方法名相同参数列表不同,返回值必须相同或都没有返回值类型。方法的覆盖属于运行时多态,子类覆盖父类的方法,子类指向父类引用,在调用方法的时候用父类的引用调用。

2、String 和StringBuffer的区别

答: STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。

3、字符串“abcde”通过写一个函数不让调用第三方的字符串,实现一个字符串倒序,比如字符串“abcde”变成“edcba”

答: String src = "ABCDEF ";

String dst = new StringBuffer(src).reverse().toString();

4、抽象类与接口的区别(abstract与interface的区别)

答:abstract可以修饰抽象方法,而一个类只要有一个抽象方法,就必须用abstract定义该类,即抽象类。

用interface修饰的类,里面的方法都是抽象方法,因此在定义接口的时候,可以直接不加那些修饰,系统会默认的添上去。接口里面的字段都是公有常量,即public static final修饰的字段。

5、集合的实现类与区别?

答:Collection接口,集合结构总的父接口,有两个子接口list和set

List接口元素有序可重复.

实现类有:ArrayList 数组实现轻量级,运行快,线程不安全。JDK1.2 查询快

Vector 数组实现重量级,运行慢,线程安全。JDK1.0

LinkedList链表实现常用语堆栈与队列的实现增删操作快Set 接口元素无序不可重复

实现类有:HashSet,底层用hashCode()算法实现,保证元素的无序唯一,自定义对象存进HashSet为了保证元素内容不重复需要覆盖hashCode()与equals()方法。

SortedSet(不重要) 元素有序(Unicode升序)唯一

TreeSet要求元素有序,自定义的对象需要实现Comparable接口的compareTo(object o)方法

Map(接口): 与Collection接口无关,有一个子接口SortedMap特点: 元素是key-value, key 唯一,无序; value可重复

实现类: HashMap 轻量级线程不安全的,允许key或value为null JDK1.2

HashTable 重量级线程安全的不允许key或value为null JDK1.0

Properties是HashTable的子类,主键和值都是字符串

SortedMap:(不重要)

特点: key唯一,有序(Unicode升序)

实现类:TreeMap

6、线程有几种状态,分别是哪些?(调用run()和调用start()的区别)

答:1)、新建状态(New):新创建了一个线程对象。

2)、就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3)、运行状态(Running):就绪状态的线程获取了CPU,执行run()方法。

4)、阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:

(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。

(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM 会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

5)、死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

当调用start方法的时候,该线程就进入就绪状态。等待CPU进行调度执行,此时还没有真正执行线程。

当调用run方法的时候,是已经被CPU进行调度,执行线程的主要任务。

7、线程的实现方式

答:线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口

8、sleep() 与wait()的区别

答:1.这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object 类。

2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可

以使用同步控制块或者方法。sleep不出让系统资源;wait是进入线程等待池

等待,出让系统资源,其他线程可以占用CPU。一般wait不会加时间限制,

因为如果wait线程的运行资源不够,再出来也没用,要等待其他线程调用

notify/notifyAll唤醒等待池中的所有线程,才会进入就绪队列等待OS分配系

统资源。sleep(milliseconds)可以用时间指定使它自动唤醒过来,如果时间不到

只能调用interrupt()强行打断。

3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而

sleep可以在任何地方使用

4. Sleep需要捕获异常,而wait不需要

9、线程中wait,join,sleep,yield, notify,notifyall,synchronized,区别及联系

答:1).sleep()方法

在指定时间内让当前正在执行的线程暂停执行,但不会释放“锁标志”。不推荐使用。sleep()使当前线程进入阻塞状态,在指定时间内不会执行。

2).wait()方法

在其他线程调用对象的notify或notifyAll方法前,导致当前线程等待。线程会释放掉它所占有的“锁标志”,从而使别的线程有机会抢占该锁。

唤醒当前对象锁的等待线程使用notify或notifyAll方法,waite() 和notify()必须在synchronized 函数或synchronized block中进行调用。3.yield方法

暂停当前正在执行的线程对象。yield()只是使当前线程重新回到可执行状态,所以执行3)yield()的线程有可能在进入到可执行状态后马上又被执行。yield()只能使同优先级或更高优先级的线程有执行的机会。

4).join方法

等待该线程终止。等待调用join方法的线程结束,再继续执行。如:t.join();//主要用于等待

t线程运行结束,若无此句,main则会执行完毕,导致结果不可预测。

10、Final、finally、finanlize()的区别

答:final?用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不

可继承。

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

11、常用设计模式及应用场景,用两种方式实现单例模式,要求线程安全?

答: 常用设计模式:

单例模式: Calendar实例的获取

适配器模式: Adapter 为ListView GridView等添加数据

工厂模式: Spring IOC 反转控制

代理模式: Spring AOP 面向切面编程

观察者模式: ContentObserver监听内容改变

(懒汉式)程序执行过程中需要这个类的对象时再实例化该类的对象

步骤1.定义静态私有对象

2. 构造方法私有化保证在类的外部无法实例化该类的对象

3. 定义对外开放的静态方法在调用方法是判断对象是否为空,为空再创建对象返回

public class Singleton {

private static Singleton singleton;

// 构造方法私有化,保证在类的外部无法实例化该类的对象

private Singleton() {

}

public static synchronized Singleton getSingletonInstance() {

if (singleton == null) {

singleton = new Singleton();

}

return singleton;

}

}

(饿汉式)类加载的时候就实例化该类的对象

public class Singleton {

private static Singleton singleton = new Singleton();

// 构造方法私有化,保证在类的外部无法实例化该类的对象

private Singleton() {

}

public static Singleton getSingletonInstance() {

return singleton;

}

}

12、常用排序算法,时间复杂度,实现思路

答: 冒泡排序O(n^2): 冒泡排序也是最简单最基本的排序方法之一。冒泡排序的思想很

简单,就是以此比较相邻的元素大小,将小的前移,大的后移,就像水中的气泡一样,最小的元素经过几次移动,会最终浮到水面上。

for (int i = 0; i < num.length; i++) {

// 内循环控制比较后移位

for (int j = num.length-1; j > i ; j--) {

if (num[j-1]>num[j]) {

temp = num[j-1];

num[j-1] = num[j];

num[j] = temp;

}

}

快速排序O(n log n) : 快速排序采用的思想是分治思想。快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

插入排序O(n^2) :将新来的元素按顺序放入一个已有的有序序列当中。

选择排序O(n^2) :第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。

13、android系统架构?

答:1)应用程序层java语言应用程序开发

2)应用程序框架层java语言OS定制framework层开发

3)系统运行库层 C C++ 实现so库

4)Linux内核层

14、Activity生命周期?保存activity的一些信息在哪个生命周期方法中?

答:共有七个周期函数:

void onCreate(Bundle savedInstanceState) 第一次创建时调用

void onStart() 被用户可见时调用

void onRestart() 当Activity处于stop状态又被重新启动时调用

void onResume() 当获得焦点即可与用户交互时调用

void onPause() 当失去焦点时调用

void onStop() 当不可见时调用

void onDestroy() 当销毁时调用

15、Activity的onSaveInstanceState() 和onRestoreInstanceState()

答: Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState() 会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。

另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity 被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity 的 onSaveInstanceState() 和 onRestoreInstanceState()方法。

16、Android的四大组件是什么?它们的作用是什么?

答:Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。

Activity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

Service 服务:一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。

BroadcastReceive广播接收器:你的应用可以使用它对外部事件进行过滤只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面。然而,它们可以启动一个activity或serice 来响应它们收到的信息。

Content Provider内容提供者 :主要用于多个应用间数据共享。这些数据可以存储在文件系统中或SQLite数据库。

17、广播如何调用,有什么方式,各自的区别?

答:程序中发送广播通过sendBroadcastReceiver()实现

接收广播通过定义一个类继承BroadcastReceiver并重写onReceive()方法实现

注册广播有两种方式:

第一种静态方式:在清单文件中通过标签声明

第二种代码动态方式:

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

IncomingSMSReceiver receiver = new IncomgSMSReceiver();

registerReceiver(receiver.filter);

1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity 结束前,移除广播接收器。

2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

18、Android中asset文件夹和raw文件夹区别?

答:res/raw和assets的相同点:

两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。

res/raw和assets的不同点:

1)res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。

2)res/raw不可以有目录结构,而assets则可以有目录结构,也就是assets目录下可以再建立文件夹

3)读取文件资源举例:

读取res/raw下的文件资源,通过以下方式获取输入流来进行写操作

InputStream is = getResources().openRawResource(R.raw.filename);

读取assets下的文件资源,通过以下方式获取输入流来进行写操作

AssetManager am = null;

am = getAssets();

InputStream is = am.open("filename");

19、Android中的五种存储方式及其应用场景

答:1)SharedPreferences

存储路径:(data/data/packagename/shares_prefs), 轻量级存储,以键值对的形式存储在xml中,一般用来保存应用中的设置属性

2)文件存储 SD卡存储多媒体文件, 文件缓存

3) Sqlite数据库存储路径:(data/data/packagename/databases), 一种嵌入式数据库,支持sql语言,存储大量结构性数据

4)ContentProvider 进程(应用程序)间数据共享,数据源可以是sqlite,也可以是xml,相关类: ContentResolver(内容解析器), ContentObserver(数据观察者)

5) 网络存储天气数据的xml,json格式等等,通过HttpUrlConnection,HttpClient,或者SOAP协议获取数据

20、什么是ANR 如何避免它?(Android线程间的通信方式? )

答:ANR:Application Not Responding(应用程序无响应).当出现下列情况时,Android就会显示ANR对话框了:对输入事件(如按键、触摸屏事件)的响应超过5秒意向接受器(intentReceiver)超过10秒钟仍未执行完毕Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。

解决方案有两种:

1. AsyncTask异步任务中,doInBackground()和onPostExecute(Result)两个方法非常重要doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如移动护理系统中的网络连接、解析XML等操作。该方法必须重载。

onPostExecute(Result) 这个方法也运行于UI线程,在doInBackground(Params…)方法执行后调用,该方法用于处理后台任务执行后返回的结果。

2. 子thread + handler

21、Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系)

一个Handler允许你发送和处理Message和Runable对象,每个线程都有自己的Looper,每个Looper中封装着MessageQueue。Looper负责不断的从自己的消息队列里取出队头的任务或消息执行。每个handler也和线程关联,Handler负责把Message和Runable对象传递给MessageQueue(用到post ,sendMessage等方法),而且在这些对象离开MessageQueue 时,Handler负责执行他们(用到handleMessage方法)。

其中Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来传递给Handler.Message对象提供额外的两个int域和一个Object域。

22、listview优化策略?

答:1)、对convetView进行判空,是当convertView不为空的时候直接重新使用convertView 从而减少了很多不必要的View的创建

2)定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

3)、当ListView加载数据量较大时可以采用分页加载和图片异步加载

23、ListView分页加载实现思路?

实现OnScrollListener 接口重写onScrollStateChanged 和onScroll方法,使用onscroll 方法实现”滑动“后处理检查是否还有新的记录,如果有,调用 addFooterView,添加记录到adapter, adapter调用 notifyDataSetChanged 更新数据;如果没有记录了,把自定义的mFooterView去掉。使用onScrollStateChanged可以检测是否滚到最后一行且停止滚动然后执行加载

24、ListView图片异步加载实现思路?

1.先从内存缓存中获取图片显示(内存缓冲)

2.获取不到的话从SD卡里获取(SD卡缓冲,,从SD卡获取图片是放在子线程里执行的,否则快速滑屏的话会不够流畅)

3.都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示(视情况看是否要显

示)

25、Intent的原理,作用,可以传递哪些类型的参数?

答:intent是连接Activity, Service, BroadcastReceiver, ContentProvider四大组件的信使,,可以传递八种基本数据类型以及string, Bundle类型,以及实现了Serializable 或者Parcelable的类型。

Intent可以划分成显式意图和隐式意图。

显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。

隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

26、如何实现屏幕分辨率的自适应?

答: 最好可以通过权重(layout_weight)的方式来分配每个组件的大小,也可以通过具体的像素(dip)来确定大小。

尽量使用Relativelayout 。

已知应用支持平台设备的分辨率,可以提供多个layout_320*480 ...

drawable-hdpi,drawable-mdpi,drawable-ldpi分别代表分辨率为480*800,360*480,240*360, 放置图片大小相差1.5倍

最后还需要在AndroidManifest.xml里添加下面一段,没有这一段自适应就不能实现:

android:largeScreens="true"

android:normalScreens="true"

android:anyDensity = "true"/>

在标签和 标签之间添加上面那段代码。即可。

备注:三者的解析度不一样,就像你把电脑的分辨率调低,图片会变大一样,反之分辨率高,图片缩小

还可以通过.9.png实现图片的自适应

27、简述Android中的IPC机制

IPC(Inter-Process Communication,进程间通信),aidl是 Android Interface definition language的缩写,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口.编译器可以通过扩展名为aidl的文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的.

BroadcastReceiver也可以实现进程间通信

ContentProvider 提供进程间数据共享

28、Android程序入口如何判断?

action节点中的android.intent.action.MAIN表明它所在的Activity是整个应用程序的入口点29、android哪几种方式访问网络?

HttpURLConnection

HttpClient方式(HttpGet和HttpPost类)

30、说说HttpClient的通信过程

1.生成请求对象(HttpGet get,HttpPost post)

2.生成客户端对象HttpClient client

3.执行请求接收相应HttpResponse response = client.execute(post)

HttpEntity entity = response.getEntity()

4.得到数据流

InputStream inputStream = entity.getContent();

5.最后关闭过期连接

31、移动互联数据交互格式有哪些及其区别?(Json与xml的区别?)

移动互联数据交互格式有XML和JSON

1.JSON和XML的数据可读性基本相同

2.JSON和XML同样拥有丰富的解析手段

3.JSON相对于XML来讲,数据的体积小

4.JSON与JavaScript的交互更加方便

5.JSON对数据的描述性比XML较差

6.JSON的速度要远远快于XML

32、XML解析有哪几种?各自优缺点,官方推荐使用哪种?

基本的解析方式有三种: DOM,SAX,Pull

1.dom解析解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用DOM 接口来操作这个树结构的优点是对文档增删改查比较方便,缺点占用内存比较大。

2.sax解析基于事件驱动型,优点占用内存少,解析速度快,缺点是只适合做文档的读取,不适合做文档的增删改查。

3.pull解析同样基于事件驱动型,android 官方API提供,可随时终止

33、百度地图核心类,及实现的功能?

BMapManager:地图引擎管理类,负责初始化,开启地图API,终止百度地图API等工作MKSearch:搜索服务.用于位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索

MKSearchListener搜索结果通知接口。该接口返回poi搜索,公交搜索,驾乘路线,步行路线结果

MapView:显示地图的View

MyLocationOverlay:一个负责显示用户当前位置的Overlay。

Overlay:Overlay是一个基类,它表示可以显示在地图上方的覆盖物。

34、GC内存泄露在什么情况下回出现?怎么解决?

(一)查询数据库没有关闭游标

(二)构造Adapter时,没有使用缓存的convertView

(三) Bitmap对象不在使用时调用recycle()释放内存

(四)不用的对象没有及时释放对象的引用

35、android内存的优化

答:android内存泄露容易导致内存溢出,又称为OOM。

Android内存优化策略:

1)在循环内尽量不要使用局部变量

2)不用的对象即时释放,即指向NULL

3)数据库的cursor即时关闭。

4)构造adapter时使用缓存contentview

5)调用registerReceiver()后在对应的生命周期方法中调用unregisterReceiver()

6)即时关闭InputStream/OutputStream。

7)android系统给图片分配的内存只有8M, 图片尽量使用软引用, 较大图片可通过BitmapFactory缩放后再使用,并及时recycle

8)尽量避免static成员变量引用资源耗费过多的实例。

36、加载大图片的时候如何防止内存溢出

答: android系统给图片分配的内存只有8M,当加载大量图片时往往会出现OOM。

Android加载大量图片内存溢出解决方案:

1)尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的source

2)使用BitmapFactory.Options对图片进行压缩

InputStream is = this.getResources().openRawResource(R.drawable.pic1);

BitmapFactory.Options options=new BitmapFactory.Options();

options.inJustDecodeBounds = false;

options.inSampleSize = 10; //width,hight设为原来的十分一

Bitmap btp =BitmapFactory.decodeStream(is,null,options);

3)运用Java软引用,进行图片缓存,将需要经常加载的图片放进缓存里,避免反复加载及时销毁不再使用的Bitmap对象

if(!bmp.isRecycle() ){

bmp.recycle() //回收图片所占的内存

system.gc() //提醒系统及时回收

}

37、Android缓存机制

答: 客户端缓存机制是android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择,比如有些新闻客户端支持离线模式,也是通过缓存机制实现的.缓存机制分为两部分,一部分是文字缓存,另一部分是多媒体文件缓存.

文字缓存有两种实现:

1)可以将与服务器交互得到的json数据或者xml数据存入sd卡中,并在数据库添加该数据的记录.添加数据库记录时,提供两个关键字段,一个是请求的URL,另一个则是本地保存后的文件地址,每次加载数据之前都会根据URL在数据库中检索

2)将JSON数据解析后装入List对象中,然后遍历List,将数据统统写入相应的数据库表结构中,以后每次向服务器发起请求之前可以先在数据库中检索,如果有直接返回.

多媒体文件缓存:主要指图片缓存

图片的缓存可以根据当前日期,时间为名字缓存到SD卡中的指定图片缓存目录,同时数据库中做相应记录,记录办法可以采用两个关键字段控制,一个字段是该图片的URL地址,另一个字段是该图片的本机地址.取图片时根据URL在数据中检索,如果没有则连接服务器下载,下载之后再服务器中作出相应记录

缓存文件删除策略:

1. 每一个模块在每次客户端自动或者用户手动更新的时候删除相应模块的缓存文件,并重新下载新的缓存文件.

2. 在设置界面中提供删除缓存的功能,点击后删除本机所有缓存.

38、如何实现消息推送,有哪些方式,各自优缺点,最常使用哪种?

答:实现消息推送的方式有五种,分别是轮询,SMS,C2DM,MQTT,XMPP最常使用的是XMPP, 我们做项目时采用的是XMPP协议

1.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特

点是将复杂性从客户端转移到了服务器端。GTalk、QQ、IM等都用这个协议。

2.轮询:客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,

而是去服务端拽数据。但是实现简单,主要缺点:耗电,浪费用户流量等

3.Google的C2DM,具体不细说,缺点,服务器在国外,不是很稳定。

4.通过短信方式, 但是很难找到免费短信平台

5. MQTT协议, IBM提供的一种推送服务,不太灵活

39、MVC在Android中的应用

答: Android中界面部分也采用了当前比较流行的MVC框架,在Android中:

1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方

便的引入。也可以使用JavaScript+HTML等的方式作为View层,通过WebView组件加载,同时可以实现Java和JavaScript之间的通信。

2) 控制层(Controller):这句话也就暗含了不要在Acitivity中写代码,要通过Activity

交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity的响应时间是5s,如果耗时的操作放在这里,Android的控制层的重任通常落在了众多的Acitvity 的肩上,程序就很容易被回收掉。

3) 模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当

然对业务计算等操作也是必须放在的该层的。

在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据。

在控制层上将数据按照视图模型的要求(也就是Android SDK中的Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定。比如显示Cursor中所有数据的ListActivity,其视图层就是一个ListView,将数据封装为ListAdapter,并传递给ListView,数据就在ListView中显示。

40、Android自定义组件实现思路

答: Android自定义组件有三种实现思路:

1)继承某个现有组件,在其基础上添加额外功能,如继承Gallery实现CoverFlow效果

2)继承某个Layout,实现复合组件自定义,如TextView和EditText组合实现登录注册组件

3)继承View,实现onDraw()方法,实现自己绘制组件,如翻页效果组件

41、版本更新的实现思路

答:在服务器相应URL上有版本文件, 客户端同时存储该应用当前版本号(SharedPreferences/Sqlite), 每次打开应用,去检测服务器版本号与本地版本号是否一致,如果不一致,则自定义对话框提示是否下载更新

42、播放视频有哪些实现方式?

答:1.使用系统自带的播放器来播放,指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。

//调用系统自带的播放器

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(uri, "video/mp4");

startActivity(intent);

2. 使用VideoView组件来播放, 可以结合MediaController来实现播控, 只是不能随意更改视频的大小及位置。

3. 使用MediaPlayer和SurfaceView来实现,这种方式很灵活,可以自定义视频播放的大小和位置。

43、NDK开发流程?(JNI运行原理)

答: NDK应用的开发流程(在应用中定义本地接口(native), 编译成.h头文件,交由C程序员实现,

将.c实现通过NDK编译成.so动态链接库,导入项目中libs/armeabi,代码中调用该本地接口) 应用场景: 音频,视频解码,拍摄车牌号,识别车牌号

44、如何实现一键退出?

答:定义一个类继承Application,定义一个集合存放所有的activity,

定义一个添加的方法,再写一个退出的方法,使用for循环全部调用finish方法,然后在每个Activity的onCreate方法中调用自定义类里的添加方法,然后在需要使用一键退出的地方调用类中的退出方法即可。

45、AndroidManifest.xml清单文件标签中属性android:excludeFromRecents="true" android:screenOrientation="portrait" android:configChanges="orientation|locale"的含义答: android:excludeFromRecents表示是否可被显示在最近打开的activity列表里,true表示否,false表示是

android:screenOrientation表示activity显示的模式, 一般用来设置activity横屏显示(horizontal)或竖屏显示(portrait)

android:configChanges=[oneormoreof:"mcc""mnc""locale""touchscreen""keyboard""keyboardHi dden""navigation""orientation""fontScale"]

是当所指定属性(Configuration Changes)发生改变时,通知程序调用onConfigurationChanged()函数,比如orientation屏幕方向发生改变,locale语言环境发生改变时

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

答:在清单文件AndroidManifest.xml中相应的标签内设置属性android:theme=”@android:style/Theme.Dialog”

47、谈谈UI中,Padding和Margin有什么区别,gravity与layout_gravity的区别

答:Padding 用来指定组件内的内容距离组件边界的距离;

Margin用来指定控件与控件之间的距离

Gravity用来指定组件内的内容相对于组件本身的位置

Layout_gravity用来指定组件相对于其父组件的位置

48、哪个组件可以实现手风琴效果,用来实现设置界面的类,实现抽屉效果, 悬浮窗口?答:实现手风琴效果(ExpandableListView)

设置界面的类(preferenceActivity)保存到sharedpreference中

抽屉效果(slidingDrawer)组件

悬浮窗口: PopWindow,可以实现类似Dialog和菜单的效果

49、Android SDK 3.0(HoneyComb)及4.0(Ice Cream)新特性

答:新版SDK发布的同时也发布了一个扩展包android-support-v4,把部分特性单独的抽出来,使低版本的SDK也可以使用这些特性,主要支持以下特性:

Fragment: 3.0引入,碎片管理,可以局部刷新UI,它设计的功能和Activity一样强大,包括生命周期、导航等,Fragment的每次导航都可以记录下来用于返回。

ViewPager: 提供了多界面切换的新效果

GridLayout: 4.0引入, 网格布局, android第六大布局

Loader: 装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单

50、android客户端如何实现自动登录

答: 通过SharedPreferences存储用户名,密码,当存储不为空时实现自动登录功能

Android工程师笔试题及答案(汇编)

Android工程师面试题 一、基础(79分) 1. String s = new String("xyz");创建了几个String Object? ( )3分 A、1个 B、2个 C、3个 D、4个 2. Math.round(11.5)和Math.round(-11.5)分别等于多少?()2分 A、11和-11 B、12和-11 C、11和-12 D、12和-12 3.以下错误的说法有:( )2分 A、只要设计合理,当出现error这样的情况时,程序完全可以自动处理 B、exception 表示一种设计或实现问题 C、Set和Map都继承自Collection接口 D、接口可以继承接口 E、抽象类可以继承没有构造函数的实体类 4. 以下哪种类型不能作为switch(expr1)表达式的expr1?( )3分 A、int B、long C、char D、byte 5. 有关ArrayList和Vector的说法,那些是错误的?( )3分 A、Vector是线程安全的 B、ArrayList是线程序不安全的 C、当需要增长时,Vector默认增长为原来一培 D、当需要增长时, ArrayList默认增长为原来一培 6. 以下说法那些是错误的?()3分 A、一个char型变量可以存储一个中文汉字 B、String是最基本的数据类型 C、Integer的缺省值是0 D、String类提供了数值不可改变的字符串 7.请指出以下代码的执行结果()5分 class A{ static{ System.out.print("X"); } public A(){ System.out.print("2"); } } class B extends A{ static{ System.out.print("a"); } public B(){ System.out.print("b"); } } public class Hello{ public static void main(String[] ars){

android笔试题及答案

单选题 中可以用来处理中警示,确认等对话框地是() .假设目录下有文件结构,用()方法将该网页加载至 时,需传入地参数是() . . . . .下列不属于补间动画相关类地是() 中网络互连中需要获取状态码,根据状态码来判断请求是否已经完成,下列状态码表示请求完成地是() .关于说法错误地是:() 里可以通过设定转换时候地透明位 .在使用一个之前,不一定要调用方法 是设置资源被读入到这个地时候动画效果 是资源文件从这个里消失地时候要实现地动画效果 .建立蓝牙连接时通过方法来获取对象 () (); (); . () .关于地说法不正确地是( ) .它实现不同进程间通信地一种机制 .它避免了在新线程中刷新地操作 .它采用队列地方式来存储 .它实现不同线程间通信地一种机制

8.和地主要区别是(): . 内部基于链表,而是基于数组地 . 地大部分方法做了同步,而没有同步 . 是可串行化地,而不是 . 实现了,而没有 .下列属于解析文件地优点地是() .将整个文档输在内存中,便于操作,支持删除,修改,重新排列等多种功能 .不用事先调入整个文档,占用资源少 .整个文档调入内存,浪费时间和空间 .不是长久驻留在内存,数据不是持久地,事件过后,若没有保存数据,数据就会消失""; ""; ""; 总共创建( )个对象. 多选题 .在添加第一个窗口小部件时,会执行地方法是() .下列属于优点地是() 与编程语言无关. 可以使用任何语言来完成是完全和厂商无关. 与平台无关 是简单地,可扩展地 3.下列属于解析需要用到地类和接口是() A. .在使用蓝牙必须获取地权限是() .< ""> .< "" > .< ""> .< ""> 5.类地重要方法()

Android编程基础笔试题及答案2.0

《Android 编程基础》试卷A 注意事项: 1. 本试卷共8页,满分100分; 2. 请把学院、姓名、班级写到密封线内,考试时间90分钟; 3. 请不要把答案写在密封线内 一、单选题(共35题,共61分) 1、 D03MA057(2分)退出 activity 对一些资源以及状态的操作保存,可以在生命周期的哪个函数中进行 a A 、onPause() B 、onCreate() C 、onResume() D 、onStart() 2、 D02MA058 (2分) Android 项目工程下面的 assets 目录的作用是什么 b A 、放置应用到的图片资源。 Res/drawable B 、主要放置一些文件资源,这些文件会被原封不动打包到 apk 里面 C 、放置字符串,颜色,数组等常量数据 res/values D 、放置一些与 UI 相应的布局文件,都是 xml 文件 res/layout 3、 D04MA059 (2分)下列不属于android 布局的是(c) A 、F r a m e L a y o u t B 、L i n e a r L a y o u t C 、BorderLayout D 、T a b l e L a y o u t E 、R e l a t i v e L a y o u t 4、 D08MA2060 (2分)Intent 的作用的是 a A 、intent 是连接四大组件的纽带,可以实现界面间切换,可以包含动作和动作数据, B 、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会 因为切 换页面而消失 service C 、实现应用程序间的数据共享 contentprovider D 、处理一个应用程序整体性的工作 5、 D04EA1061(1分) 下列哪个是AbsoluteLayout 中特有的属性 b A,android:layout_height B,android:layout_x C,android:layout_above D,android:layout_toRightOf 6、 D07EA1062(1分)RatingBar 组件中不能用属性直接设置的是d A,五角星个数 B,当前分数C,分数的增量D,五角星的色彩 7、 D 10EA1063(1分) 在手机开发中常用的数据库是_a__ A,sqlLite B,Oracle C,Sql Server D,Db23 8、 D14MA2064(2分) 关于BroadcastReceiver 的说法不正确的是_b_ A, 是用来接收广播Intent 的 密封线内不要答 题 学院班级姓名

android面试题及答案

一选择题(可多选,30分) 1、关于BroadcastReceiver说法正确的是(AB) A、BroadcastReceiver有两种注册方式,静态注册和动态注册 B、Broadcast分正常广播和有序广播,其中有序广播可以被停止掉,不传给下一个接受者 C、Broadcast Receiver 提供了可视化的界面来显示广播信息 D、BroadcastReceiver的onReceive函数里可以使用线程来执行耗时的操作 2、关于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 中的一个进程,所以说可以认为是同一个概念. 3 android 中下列关于Intent说法正确的是(C) A、实现应用程序间的数据共享 B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D、处理一个应用程序整体性的工作 4 android 关于service生命周期的onCreate()和onStart()说法正确的是(AD) A、当第一次启动的时候先后调用onCreate()和onStart()方法 B、当第一次启动的时候只会调用onCreate()方法 C、如果service已经启动,将先后调用onCreate()和onStart()方法 D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法 5.在异常处理中,如释放资源、关闭文件、关闭数据库等由( C)来完成。 A.try子句 B.catch子句 C.finally子句 D.throw子句 6.关于Collections说法正确的是(AC) A.Collections 包含有各种有关集合操作的静态多态方法 B.Collections是集合类的一个顶级接口, C.Collections 是一个包装类,此类不能实例化 D.List是Collections的子接口 7.关于java抽象类说法正确时是(AC)

Android面试题附答案

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个字节

Android Java面试笔试题

Android Java笔试题(带大部分答案) 请将试题答在答题卡上,不要在试卷中做任何标记 一、基础题: 1. 1. 请写出输出结果 public class Test1 { public static void changeStr(String str){ str=”welcome”; } public static void main(String[] args) { String str=”1234″; changeStr(str); System.out.println(str); } } ___”1234″____________________________________________________ 1. 2. 请写出输出结果 public class Test2 { static boolean foo(char c) { System.out.print(c); return true; } public static void main(String[] argv) { int i = 0; for (foo(…A?); foo(…B?) && (i < 2); foo(…C?)) { i++; foo(…D?); } } } _____ABDCBDCB___________________________________________________ 1.class A {

protected int method1(int a, int b) { return 0; } } 以下A扩展类中的方法哪两个是正确的:(选择两个) A.public int method1(int a, int b) { return 0;} B.private int method1(int a, int b) { return 0;} C.private int method1(int a, long b) { return 0;} D.public short method1(int a, int b) { return 0;} E.static protected int method1(int a, int b) { return 0;} ____AD___________________________________________________ 1.public class Outer{ public void someOuterMethod() { // Line 3 } public class Inner{} public static void main(String[] args) { Outer o = new Outer(); // Line 8 } } 下列哪一个对Inner类实例化的描述是正确的?D A.new Inner(); // At line 3 B.new Inner(); // At line 8 C.new o.Inner(); // At line 8 D.new Outer.Inner(); // At line 8//new Outer().new Inner() 1. 5. 下面这个程序正确吗? 如果不正确请说出哪里错误。 public class Something { public static void main(String[] args) { Other o = new Other(); new Something().addOne(o); } public void addOne(final Other o) { o.i++;

android笔试题及答案

单选题 中可以用来处理js中警示,确认等对话框的是(C) 2.假设assets目录下有文件结构html/,用loadUrl()方法将该网页加载至 webView 时,需传入的参数是(B) A. B. C. D. 3.下列不属于补间动画相关类的是(B) 中网络互连中需要获取状态码,根据状态码来判断请求是否已经完成,下列状 态码表示请求完成的是(D) 5.关于ImageSwitcher 说法错误的是:( B ) 里可以通过Alpha设定转换时候的透明位 B.在使用一个ImageSwitcher之前,不一定要调用setFactory方法 是设置资源被读入到这个ImageSwitcher的时候动画效果 是资源文件从这个ImageSwitcher里消失的时候要实现的动画效果 6.建立蓝牙连接时通过_D_方法来获取BluetoothAdapter对象 D. () 7.关于Handler的说法不正确的是( A ) A.它实现不同进程间通信的一种机制 B.它避免了在新线程中刷新UI的操作 C.它采用队列的方式来存储Message D.它实现不同线程间通信的一种机制 8.Vector和ArrayList的主要区别是(B): A. ArrayList内部基于链表,而Vector是基于数组的

B. Vector的大部分方法做了同步,而ArrayList没有同步 C. Vector是可串行化的,而ArrayList不是 D. Vector实现了RandomAccess,而ArrayList没有 9.下列属于SAX解析xml文件的优点的是(B ) A.将整个文档输在内存中,便于操作,支持删除,修改,重新排列等多种功能 B.不用事先调入整个文档,占用资源少 C.整个文档调入内存,浪费时间和空间 D.不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失 a1="abc"; String a2="abc"; String a3="abcd"; 总共创建( A )个String对象。 多选题 1.在添加第一个appwidget窗口小部件时,会执行的方法是(ABD) 2.下列属于SOAP优点的是(ABCD) A,SOAP 与编程语言无关。SOAP 可以使用任何语言来完成 B,SOAP 是完全和厂商无关。 C,SOAP 与平台无关D,SOAP 是简单的,可扩展的 3.下列属于SAX解析XML需要用到的类和接口是(BCD) A.DocumentBuilder 4.在使用蓝牙必须获取的权限是(AD) 5.Chronometer类的重要方法(ABC) 简答题 1.oom是什么如何避免 当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后这就会抛出OutOfMemoryException 也就是OOM 避免:

Android面试题带标准答案

Android面试题 下列哪些语句关于内存回收的说明是正确的? (b ) A、程序员必须创建一个线程来释放内存 B、内存回收程序负责释放无用内存 C、内存回收程序允许程序员直接释放内存 D、内存回收程序可以在指定的时间释放内存对象 下面异常是属于Runtime Exception的是(abcd)(多选) A、ArithmeticException B、IllegalArgumentException C、NullPointerException D、BufferUnderflowException Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12 下列程序段的输出结果是:(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 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d) A、onPause() B、onCreate() C、 onResume() D、onStart() Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选) A、Serializable B、charsequence C、Parcelable D、Bundle android 中下列属于Intent的作用的是(c) A、实现应用程序间的数据共享 B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D、处理一个应用程序整体性的工作 下列属于SAX解析xml文件的优点的是(b) A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能 B、不用事先调入整个文档,占用资源少 C、整个文档调入内存,浪费时间和空间 D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会 消失 下面的对自定style的方式正确的是(a) A、 <resources> ?<stylename="myStyle"> ? ?</style> B、<style name="myStyle"> ?<item name="android:layout_width">fill_parent</item>

Android面试题集合(含答案)

云时代 Android面试题集[键入文档副标题]

目录 第一章Android最全面试题71道题 (55) 一、选择题 (55) 二.填空和问答 (1212) 25. android中常用的五个布局是FrameLayout(单帧布局)、RelativeLyout(相对布局)、LinerLayout(线 性布局)、TableLayout(表格布局)、AbsoluteLayout(绝对布局) (1212) 26. android 的四大组件是__Activity Service BrodcastReceiver ContentProvier。1212 27. java.io包中的__ObjectInputStream_和_ObjectOutputStream_类主要用于对对象(Object)的读写。 (1212) 28. android 中service的启动方法有:__startService____bindService_ (1212) 29. activity一般会重载7个方法用来维护其生命周期,分别是:onCreate onStart onResume onPause onStop onDestroy onRestart (1212) 30. android的数据存储的方式有:SharedPreferences数据存储、文件存储、SQLite数据库存储数据、 Contentprovider存储数据、网络存储数据 (1212) 31. 当启动一个Activity 并且新的Activity 执行完后需要返回到启动它的Activity 数据,启动新 Activity的方法是_startActivityForResult(intent,RequestCode)_,用来处理返回数据的Activity回调函 数是void onActivityResult(int requestCode,int resultCode,intent data)_。 (1313) 33.下面程序运行的结果是:______________。 (1313) 34. 在android中,请简述jni的调用过程。 (1414) 35. 简述Android的体系结构包括哪些? (1414) 36. 请继承SQLiteOpenHelper实现下述功能 (1414) 37. 页面上现有ProgressBar 控件progressBar,请用书写线程以10秒的的时间完成其进度显示工 作。 (1515) 38. 请描述Activity 的生命周期。 (1616) 39. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?1717 40. 如何将一个Activity 设置成对话框窗口的样式。 (1717) 41. 如何退出Activity?如何安全退出已调用多个Activity 的Application? (1717) 43. 请介绍下Android的数据存储方式。 (1919) 44. 请介绍下ContentProvider是如何实现数据共享的。 (1919) 45. 如何启用Service,如何停用Service。 (2020) 46. 注册广播接收器有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。 .......................................................................... 错误!未定义书签。错误!未定义书签。 47. 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。错误!

Android面试题-带答案

1.介绍一下Android系统的体系结构 答:应用层:android的应用程序通常涉及用户界面和交互。 应用框架层:UI组件、各种管理器等。 函数库层:系统C库、媒体库、webkit、SQLite等。 linux核心库:linux系统运行的组件。 2.Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期及一些跳转逻辑 service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事物,定义好需要接受的Intent提供同步和异步的接口 Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径 BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型 3.请介绍下Android的数据存储方式。 答:一.SharedPreferences方式 二.文件存储方式 三.SQLite数据库方式 四.内容提供器(Content provider)方式 五. 网络存储方式 4.说说mvc模式的原理 答:mvc是model,view,controller的缩写,mvc包含三个部分: 模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。 视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。 控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。 5.如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态? 答:重写onSaveInstanceState()方法,在此方法中保存需要保存的数据,该方法将会在activity被回收之前调用。通过重写onRestoreInstanceState()方法可以从中提取保存好的数据

android开发笔试题及答案

Android开发笔试题及答案 一、选择题(20题,每题2分,共40分) 1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(CG) 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.以下程序的运行结果为( 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、编译出错 4.Java语言中字符串“学Java”所占的内存空间是(A) A. 6个字节 B. 7个字节 C. 10个字节 D. 11个字节 5.关于下列程序段的输出结果,说法正确的是:(D ) public class MyClass{ static int i; public static void main(String argv[]){ System.out.println(i); } }

android笔试题及答案

单选题 1.WebView中可以用来处理js中警示,确认等对话框的是(C) A.WebSettings B.WebViewClient C.WebChromeClient D.WebViewChrome 2.假设assets目录下有文件结构html/hello.html,用loadUrl()方法将该网页加载至webView 时,需传入的参数是(B) A. file:///asset/html/hello.html B.file:///android_asset/html/hello.html C.file:///androidasset/hello.html D.file:///assets/html/hello.html 3.下列不属于补间动画相关类的是(B) A.TranslateAnimation B.FrameAnimation C.RotateAnimation D.AlphaAnimation 4.Android中网络互连中需要获取状态码,根据状态码来判断请求是否已经完成,下列状态码表示请求完成的是(D) A.100 B.202 C.404 D.200 5.关于ImageSwitcher 说法错误的是:(B ) A.ImageSwitcher里可以通过Alpha设定转换时候的透明位 B.在使用一个ImageSwitcher之前,不一定要调用setFactory方法 C.setInAnimation是设置资源被读入到这个ImageSwitcher的时候动画效果 D.setOutAnimation是资源文件从这个ImageSwitcher里消失的时候要实现的动画效果 6.建立蓝牙连接时通过_D_方法来获取BluetoothAdapter对象 A.BluetoothAdapter.getBluetoothAdapterAdapter() B.BluetoothAdapter adapter=new BluetoothAdapter(); C.BluetoothAdapter.BluetoothAdapterAdapter(); D. BluetoothAdapter.getDefaultAdapter() 7.关于Handler的说法不正确的是( A ) A.它实现不同进程间通信的一种机制 B.它避免了在新线程中刷新UI的操作 C.它采用队列的方式来存储Message D.它实现不同线程间通信的一种机制 8.Vector和ArrayList的主要区别是(B): A. ArrayList内部基于链表,而Vector是基于数组的

Android面试题(详细答案)

Android面试题(有详细答案) 附带答案,共100分 一、选择题(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 )

Android面试题及答案三

Android面试题及答案三 41. 如何退出Activity?如何安全退出已调用多个Activity的Application?对于单一Activity的应用来说,退出很简单,直接finish()即可。 当然,也可以用killprocess()和System.exit()这样的方法。 但是,对于多Activity的应用来说,在打开多个Activity后,如果想在最后打开的Activity直接退出,上边的方法都是没有用的,因为上边的方法都是结束一个Activity而已。 当然,网上也有人说可以。 就好像有人问,在应用里如何捕获Home键,有人就会说用keyCode比较KEYCODE_HOME即可,而事实上如果不修改framework,根本不可能做到这一点一样。 所以,最好还是自己亲自试一下。 那么,有没有办法直接退出整个应用呢? 在2.1之前,可以使用ActivityManager的restartpackage方法。 它可以直接结束整个应用。在使用时需要权限 android.permission.RESTART_pACKAGES。 注意不要被它的名字迷惑。 可是,在2.2,这个方法失效了。 在2.2添加了一个新的方法,killBackgroundprocesses(),需要权限android.permission.KILL_BACKGROUND_pROCESSES。

可惜的是,它和2.2的restartpackage一样,根本起不到应有的效果。 另外还有一个方法,就是系统自带的应用程序管理里,强制结束程序的方法,forceStoppackage()。 它需要权限android.permission.FORCE_STOp_pACKAGES。 并且需要添加android:sharedUserId="android.uid.system"属性 同样可惜的是,该方法是非公开的,他只能运行在系统进程,第三方程序无法调用。 因为需要在Android.mk中添加LOCAL_CERTIFICATE := platform。 而Android.mk是用于在Android源码下编译程序用的。 从以上可以看出,在2.2,没有办法直接结束一个应用,而只能用自己的办法间接办到。 现提供几个方法,供参考: 1、抛异常强制退出: 该方法通过抛异常,使程序ForceClose。 验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。 2、记录打开的Activity: 每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

Android面试题带答案

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、不用事先调入整个文档,占用资源少

android软件测试面试题及答案

android软件测试面试题及答案 android软件测试面试题及答案(一) 1、 Android的四大组件是哪些,它们的作用? 答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑 service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的食物,定义好需要接受的Intent提供同步和异步的接口Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径 BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型 2、请介绍下Android中常用的五种布局。 常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。 一、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。 二、LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局

Android面试题集合(含标准答案)

云时代 Android面试题集[键入文档副标题]

目录 第一章Android最全面试题71道题4? 一、选择题 (4) 二.填空和问答9? 25. android中常用的五个布局是FrameLayout(单帧布局)、RelativeLyout(相 对布局)、LinerLayout(线性布局)、TableLayout(表格布局)、Absolute Layout(绝对布局)9? 26. android 的四大组件是__Activity Service BrodcastReceiver ContentProvier。9? 27. java.io包中的__ObjectInputStream_和_ObjectOutputStream_ 9 类主要用于对对象(Object)的读写。? 28.android 中service的启动方法有:__startService____bindServi ce_?9 29. activity一般会重载7个方法用来维护其生命周期,分别是:onCreate onStartonResume onPause onStop onDestroyonRestar t?9 30. android的数据存储的方式有:SharedPreferences数据存储、文件存 储、SQLite数据库存储数据、Contentprovider存储数据、网络存储数据..... 10 31. 当启动一个Activity 并且新的Activity执行完后需要返回到启动它的A ctivity 数据,启动新Activity的方法是_startActivityForResult(intent,RequestCode)_,用来处理返回数据的Activity回调函数是void onActiv ityResult(int requestCode,int resultCode,intent data)_。 (10) 33.下面程序运行的结果是:______________。10? 34.在android中,请简述jni的调用过程。1?1 35. 简述Android的体系结构包括哪些??11 36. 请继承SQLiteOpenHelper实现下述功能1?1 37. 页面上现有ProgressBar控件progressBar,请用书写线程以10 秒的的时间完成其进度显示工作。12? 38. 请描述Activity 的生命周期。 (13)

2020经典_Android面试题带答案

…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; ; } 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、不用事先调入整个文档,占用资源少

相关主题