锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

19、android面试题整理(自己给自己充充电吧)

时间:2023-08-11 01:37:00 diary继电器

(转载,出处丢失,请原谅原作者。如有意见,我会尽快删除本文)

JAVA

1.GC是什么? 为什么要有GC?
GC这意味着垃圾收集(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或错误的内存回收会导致程序或系统不稳定甚至崩溃,Java提供的GC该功能可以自动监控对象是否超过作用域,从而达到自动回收内存的目的,Java语言不提供释放已分配内存的显示操作方法。

2.XML解释技术有哪些区别?
DOM和SAX
DOM将文档分析成文档树,可以在节点上遍历、添加、修改和删除。一次性读入内存,消耗大量内存。
SAX从上到下分析文档,由事件驱动。内存不会一次读取,内存消耗小,节点不能随意读取,节点不能添加、修改和删除。

3.switch句子能否作用于byte上,能否作用于long上,能否作用于String上?
switch能作用在byte、char、short和int上,JDK1.7后可以作用String上。

4."=="和equals方法有什么区别?
==和equals可以比较地址。==是运算符,equals这是一种改变其行为的方法,如重写String的equals就是比较字符串内容。

5.结构方法能否重写重载?
构造方法不能重写,但可以重载。

6.面向对象的特征是什么?
包装、继承、多态和抽象。
7.抽象类和接口的区别?
1).抽象类是abstract class修改,接口是interface修饰。
2).抽象类可以具有任何类型的属性,接口只能具有静态常量修改的属性。
3).抽象可以有普通的方法和抽象方法,接口方法是抽象方法。
4).抽象和界面不能实例化,但抽象有结构方法,界面没有结构方法。
5).抽象只能单根继承,接口可以多重实现。

8.内部类能引用其包含类成员吗?有什么限制吗?
可引用。如果需要指定当前类别,则需要使用外部类别。.this引用。若引用局部变量,则需将局部变量指定为final。

9.String s = new String("xyz");创建了几个String Object? 两者有什么区别?
2个对象。"xyz"在字符串常量池中创建,new String()在堆中创建。

10.try {}里面有一个return然后跟着这个句子,try后的finally {}里的code什么时候执行,什么时候执行?return前还是后?
会在return前执行。

11.Integer与int的区别
Integer为包装类,int是基本数据类型。包装类有方法和属性,没有基本数据类型。包装类可以通过intValue它也可以转换为基本数据类型new Integer()将基本数据类型转换为包装类。JDK1.5后,包装类和基本数据类型可以自动转换。

12.sleep()和wait()有什么区别?
sleep是Thread类的方法,wait是Object类的方法。
sleep是自动唤醒,wait需要其他线程来唤醒。
sleep同步不会释放,wait释放同步锁。
sleep可用于任何方法,wait只能用于同步方法或同步块。

13.Sleep() 对象锁不会释放 到时自动恢复 wait()释放对象锁 进入等待对象等待锁定池 发出notify()方法后 进入等待锁定池准备对象锁进入运行状态

14.在什么情况下,同步和异步有什么异同?
同步是指同时只执行一个线程,其他线程需要等待。异步是指多个线程可以同时执行一种方法,并共享相同的资源。
同步可以使访问资源安全,因为同时只能访问一个线程。但效率并不高。
异步会导致访问资源的不稳定。例如,多线程同时访问一个资源,一个在修改,一个在删除,一个在读取,这可能会导致资源的混乱。但由于同时运行,提高了执行效率。

15.用于启动线程run()还是start()?
start()启动线程的方法,run该方法是线程执行的主要方法。

16.java有多少种流?JDK为每种类型的流量提供了一些抽象的继承,请告诉我它们是什么类型的?
java有三种流,即字节流(InputStream、OutputStream)、字符流(Reader、Writer)、对象流(ObjectInputStream、ObjectOutputStream)。

17.字节流和字符流的区别?
用于读写二进制数据,如图片、图像等数据。
字符流用于读写字符数据,如传输字符串。
所有数据都可以通过字节流处理,但如果是字节流,则需要在转换后传输。如果使用字节流,可以促进数据的转换。

18.error和exception有什么区别?
error是系统错误,代码不能处理的错误,比如内存溢出、堆栈溢出等。
exception程序异常,代码可以使用try-catch处理,如空指针异常、数组越界等。

19.谈谈final,finally,finalize的区别?
final是修饰符,可修饰类(不能继承)、属性(常量)、方法(不能重写)。
finally是异常处理块中的代码块,表示无论如何都会执行。
finalize是Object类别方法,该方法在垃圾回收前执行。

20.当一个线程进入一个对象时synchronized方法结束后,其他线程象的其他方法?
如果没有添加其他方法synchronized可以进入。

21.当一个对象作为参数传输到一种方法时,该方法可以改变对象的属性并返回变化后的结果,那么这里是值传输还是引用传输?
java只有值传递。如果传输对象实际上是传输对象的地址。

22.作用域public,private,protected,还有不写的区别
public公共修饰符表示任何类别都可以访问。
protected对于受保护的修饰符,表示同类、同包、不同包,但父子关系是可访问的。
不写意味着默认修改符,或称为package修饰符,说明只有同类或同包下的类才能访问,出了这个包就不能访问了。
private对于私有修饰符,说明只有同类才能访问,出了这类就不能访问。

23.用最有效率的方法算出2乘以8等於几 2《 3
向左移动2进制3位。java中用<<来移位。

24.heap和stack有什么区别?
heap表示堆,stack表示栈。堆放对象,堆放引用变量。
堆叠空间是一个无序的空间,堆栈是先进的结构。

25.运行异常和一般异常是什么?
异常运行是指继承RuntimeException这些异常在编译过程中不能处理,只有在运行过程中出现问题时才能抛出。NullPointException、ArrayIndexOutOfBoundsException
一般异常也称为编译异常,这些异常是继承的Exception但又不属于RuntimeException如果程序中出现这些异常,必须在编译过程中捕获或抛出,否则编译无法通过。IOException、FileNotFoundException

26.垃圾回收的优点和原理。并考虑两种回收机制
Java语言的一个显著特点是引入垃圾回收机制,使之成为可能c 程序员最头疼的内存管理问题很容易解决,这使得Java程序员在编写程序时不再需要考虑内存管理。由于垃圾回收机制,Java不再有对象"作用域"只有引用对象的概念才有"作用域"。垃圾回收能有效防止内存泄漏,有效利用内存。垃圾回收器通常作为一个单独的低级线程运行。在不可预测的情况下,它清楚地回收了存储堆中死亡或长期未使用的物体。程序员不能实时调用垃圾回收器回收某个物体或所有物体。回收机制包括分代复制垃圾回收和标记垃圾回收、增量垃圾回收。

27.描述一下JVM加载class文件的原理机制
JVM装载中类是由的ClassLoader以及它的子类,Java ClassLoader 重要的是Java系统组件在运行过程中。它负责在运行过程中搜索和装入类文件。

28.能否从一个开始static方法内部发出对非static调用方法?
不,除非先创造非static方法所在类的对象。

29.什么是java如何实现序列化java序列化?

30.使用serializable关键字 使用输出流构建对象流对象 然后使用对象流对象writeObject()参数可以是obj的对象写出

31.Anonymous Inner Class(匿名内部类)能否extends(继承)其他类别是否可以implements(实现)interface(接口)?
匿名内部类可以继承或实现接口,但不显示使用extends或implements继承或实现。

32.ArrayList和Vector的区别,HashMap和Hashtable的区别?
ArrayList是JDK1.2的集合类并且线程不安全,Vector是1.0集合类,线程安全,用法相似。
HashMap线程不安全,可以放空键或空值,Hashtable线程安全,不能放空键或空值。

33.String 和StringBuffer有什么区别?在什么情况下使用它们?
String字符串的基本类别是不可变的。StringBuffer用堆来存储字符串,并且可以改变字符串的内容。

34.new一个类对象和使用类名创建一个对象有什么区别?二者使用时应该注意什么?
new对象是创建对象最常见的方式,使用类模板通过反射创建对象。new对象也会通过类模板在底层创建,但是new对象的效率高于直接通过类模板创建对象。
但使用类模板可以提高程序的灵活性。

35.LinkedList和ArrayList的区别?
1)LinkedList是链表结构的集合,ArrayList集合数组结构。
2)LinkedList增加或删除中间或前面的数据的效率比ArrayList高。
3)LinkedList最后添加或删除数据时效率比ArrayList低。
4)遍历数据时ArrayList效率高于LinkedList。

36.介绍JAVA常用于开发Collectin FrameWork(集合框架)?
Java中集合框架分为Collection和Map接口,Collection接口下的集合每个元素都由一个值组成,Map接口下的集合类每个元素都是由键值对组成。
Collection接口下面有List和Set接口,List接口下常见的类有ArrayList、LinkedList、Vector。它们中的元素可以重复,并且是有序的。Set接口下常见的类有HashSet、TreeSet。它们中的元素不能重复,并且是无序的。

37.在异常当中 throw和throws 有什么区别和联系?
throw是在代码中抛出一个异常,后面跟的是异常对象,虚拟机运行到这里时会立即引发一个异常。
throws是写在方法声明上的,表示声明该方法可能会抛出异常,后面跟的是异常类型。调用该方法的时候可以选择处理它或继续往外抛。

38.重载和重写的区别
重载是指在一个类中,两个或两个以上的方法具有相同方法名和不同参数列表,则表示这些方法为重载方法。
重写是指在父类和子类中,子类的方法和父类的方法具有相同方法名、相同参数列表、相同返回类型、子类的访问修饰符范围不小于父类的访问修饰符范围,异常的类型和个数不大于或多于父类的异常类型和个数,则表示该方法为重写方法。换句话说重载方法是区分同一个类中相同方法名的方法,重写方法是找到父类相同方法名的方法并重新改变方法的行为。

Android

39.activity、Service、BroadcastReceiver的作用(android)
Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑
service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的指令,定义好需要接受的Intent提供同步和异步的接口
BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型

40.描述一个完整的Android activity lifecycle
activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();

41.显式intent和隐式intent的区别是什么(android)
Intent定义:Intent是一种在不同组件之间传递的请求消息,是应用程序发出的请求和意图。作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。
显式Intent定义:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。
隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。
说明:Android系统使用IntentFilter 来寻找与隐式Intent相关的对象。

42.Android中线程同步的方法
线程同步的方法可以采用同步方法和同步块。

43.怎么将一个Activity封装成对话框的样子? 怎样将Activity封装成长按Menu菜单的样子?
简单你只需要设置 一下Activity的主题就可以了在AndroidManifest.xml 中定义 Activity的地方一句话:
Xml代码
android :theme="@android:style/Theme.Dialog"
android:theme="@android:style/Theme.Dialog"
这就使你的应用程序变成对话框的形式弹出来了,或者
Xml代码
android:theme="@android:style/Theme.Translucent"
android:theme="@android:style/Theme.Translucent"
就变成半透明的。
重写OnCreateOptionMenu方法来处理按下menu后的行为,然后再该方法中弹出对话框形式的Activity。
也可以利用事件监听来监听menu按键,并在该按钮按下后弹出对话框形式的Activity。

44.介绍一下Android系统的体系结构
应用层:android的应用程序通常涉及用户界面和交互。
应用框架层:UI组件、各种管理器等。
函数库层:系统C库、媒体库、webkit、SQLite等。
linux核心库:linux系统运行的组件。

*45.描述下横竖屏切换时候 activity 的生命周期
不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次.
设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次.
设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法.

46.android 中的动画有哪几种,它们的特点和区别是什么 ?
两种,一种是补间动画(Tween)动画、还有一种是帧动画(Frame)动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

47.一条最长的短信息约占多少 byte?
140byte,70个汉字。

48.描述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。

49.如何将 SQLite 数据库 (dictionary.db 文件 ) 与 apk 文件一起发布 ?
可以将dictionary.db文件复制到Eclipse Android工程中的res\raw目录中。所有在res\raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。
使用openDatabase方法来打开数据库文件,如果该文件不存在,系统会自动创建/sdcard/dictionary目录,并将res\raw目录中的 dictionary.db文件复制到/sdcard/dictionary目录中

50.说说 android 中 mvc 的具体体现
mvc是model,view,controller的缩写,mvc包含三个部分:
模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:
1)视图(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入。
2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写过多的代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

51.请介绍下 Android 中常用的五种布局
帧布局(FrameLayout)
线性布局(LinearLayout)
表格布局(TableLayout)
相对布局(RelativeLayout)
绝对布局(AbsoluteLayout)

52.如何启用 Service ,如何停用 Service
1)startService用于启动Service、stopService停止Service。
2)bindService绑定Service,unbindService解除Service的绑定。

53.如何优化ListView
1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。
2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。
3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。

54.描述4 种 activity 的启动模式
1)standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为MainActivity,执行语句:
startActivity(new Intent(MainActivity.this, MainActivity.class))后,MainActivity将跳转到另外一个MainActivity,也就是现在的Task栈里面有MainActivity的两个实例。按返回键后你会发现仍然是在MainActivity(第一个)里面。
2)singleTop:singleTop 跟standard 模式比较类似。如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。例:当MainActivity为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。
3)singleTask: singleTask模式和后面的singleInstance模式都是只创建一个实例的。在这种模式下,无论跳转的对象是不是位于栈顶的activity,程序都不会生成一个新的实例(当然前提是栈里面已经有这个实例)。这种模式相当有用,在以后的多activity开发中,经常会因为跳转的关系导致同个页面生成多个实例,这个在用户体验上始终有点不好,而如果你将对应的activity声明为 singleTask 模式,这种问题将不复存在。
4)singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感觉task可以理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其他activity是独立的,它有自己的上下文activity。

55.什么是Intent,如何使用?
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活Android应用的三个核心组件:活动、服务和广播接收器。
通过startActivity() orstartActivityForResult()启动一个Activity;
过 startService() 启动一个服务,或者通过bindService() 和后台服务交互;
通过广播方法(比如 sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast())发给broadcast receivers

56.Android用的数据库是什么样的?它和sql有什么区别?为什么要用ContentProvide?它和sql的实现上有什么差别?
Adnroid用的是SQLite数据库。它和其他网络数据库类似,也是通过SQL对数据进行管理。SQLite的操作非常简单,包括数据类型在建表时也可以不指定。
使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri。

57.通过Intent传递一些二进制数据的方法有哪些?
1)使用Serializable接口实现序列化,这是Java常用的方法。
2)实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。

58.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行?
onResume()恢复数据、onPause()保存数据。

59.如何一次性退出所有打开的Activity
编写一个Activity作为入口,当需要关闭程序时,可以利用Activity的SingleTop模式跳转该Activity,它上面的所有Activity都会被销毁掉。然后再将该Activity关闭。
或者再跳转时,设置intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);这样也能将上面的Activity销毁掉。

60.说说Service的生命周期?
启动Service的方式有两种,各自的生命周期也有所不同。
一、通过startService启动Service:onCreate、onStartCommand、onDestory。
二、通过bindService绑定Service:onCreate、onBind、onUnbind、onDestory。

61.什么是AIDL?AIDL是如何工作的?
AIDL(Android接口描述语言)是一种接口描述语言; 编译器可以通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程的目的. 如果需要在一个Activity中, 访问另一个Service中的某个对象, 需要先将对象转化成AIDL可识别的参数(可能是多个参数), 然后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成自己需要的对象。AIDL是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值.。

62.Android如何把文件存放在SDCard上?
在AndroidManifest.xml中加入访问SDCard的权限如下:




要往SDCard存放文件,程序必须先判断手机是否装有SDCard,并且可以进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限。
Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于获取SDCard的目录。

63.注册广播有几种方式,这些方式有何优缺点?
两种。一种是通过代码注册,这种方式注册的广播会跟随程序的生命周期。二种是在AndroidManifest.xml中配置广播,这种常驻型广播当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

64.什么是ANR 如何避免它?
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。要避免它,应该尽量少在主线程做耗时太长的操作,应该将这些操作放在线程当中去做。

65.Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?
有可能,比如空指针异常、数组下表越界等异常,这些异常抛出后可能会导致程序FC。在编写代码时应该做好检测,多考虑可能会发生错误的情况,从代码层次解决这些问题。

66.为什么要用 ContentProvider?它和 sql 的实现上有什么差别?
使用ContentProvider 可以将数据共享给其他应用,让除本应用之外的应用也可以访问本应用的数据。它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以Sql实现,只是在上层提供的是Uri。

67.谈谈 UI 中, Padding 和 Margin 有什么区别?
padding指内边距,表示组件内部元素距离组件边框的距离。
marin指外边距,表示组件与组件之间的距离。

68.请介绍下 Android 的数据存储方式。
Android 提供了5种方式存储数据:
1)使用SharedPreferences存储数据;
2)文件存储数据;
3)SQLite数据库存储数据;
4)使用ContentProvider存储数据;
5)网络存储数据;

 

 

 

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 )
public class MyClass{
static int i;
public static void main(Stringargv[]){
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、
fill_parent

C、
fill_parent

D、
fill_parent

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 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(d)。
BEGIN TRANSACTION A
Update SALES Set qty=30WHERE qty<30
BEGIN TRANSACTION B
Update SALES Setqty=40 WHERE qty<40
Update SALES Setqty=50 WHERE qty<50
Update SALES Setqty=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、管理一个EGLdisplay,它能让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、FrameC、Draw D、Animation
27.下面关于Androiddvm的进程和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 classExample{
  Stringstr=new String("good");
  char[]ch={'a','b','c'};
  publicstatic void main(String args[]){
    Exampleex=new Example();
    ex.change(ex.str,ex.ch);
    System.out.print(ex.str+"and ");
    Sytem.out.print(ex.ch);
  }
  public voidchange(String str,char ch[]){
    str="testok";
    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 {

publicfinal static String DATABASENAME = "diaryOpenHelper.db";
publicfinal static int DATABASEVERSION = 1;

//创建数据库
publicDBHelper(Context context,String name,CursorFactory factory,int version)
{
super(context,name, factory, version);
}
//创建表等机构性文件
publicvoid onCreate(SQLiteDatabase db)
{
Stringsql ="create table diary"+
"("+
"_idinteger primary key autoincrement,"+
"topicvarchar(100),"+
"contentvarchar(1000)"+
")";
db.execSQL(sql);
}
//若数据库版本有更新,则调用此方法
publicvoid onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
{

Stringsql = "drop table if exists diary";
db.execSQL(sql);
this.onCreate(db);
}
}

4.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度
显示工作。(10分)
答案
public class ProgressBarStu extendsActivity {

privateProgressBar progressBar = null;
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progressbar);
//从这到下是关键
progressBar= (ProgressBar)findViewById(R.id.progressBar);

Threadthread = new Thread(new Runnable() {

@Override
publicvoid run() {
intprogressBarMax = progressBar.getMax();
try{
while(progressBarMax!=progressBar.getProgress())
{

intstepProgress = progressBarMax/10;
intcurrentprogress = 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 - Cd:\card.img
10.good and gbc

 

---------------------------


1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

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

2、sim卡的EF 文件有何作用

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

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

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

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

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

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

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

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

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

7、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。

8、说说mvc模式的原理,

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

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

9. View的刷新:

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

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

10. GC内存泄露 出现情况:

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

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

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

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

11、 Activity的生命周期

public class MyActivity extends Activity { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); } 你自己写的Activity会按需要 重 载这些方法,onCreate是免不了的,在一个Activity正常启动的过程中,他们被调用的顺序是 onCreate -> onStart ->onResume, 在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy ,这样就是一个完整的生命周期,但是有人问了 ,程序正运行着呢来电话了,这个程序咋办?中止了呗,如果中止的时候新出的一个Activity是全屏的那么:onPause->onStop ,恢复的时候onStart->onResume ,如果打断 这个应用程序的是一个Theme为Translucent 或者Dialog 的Activity那么只是onPause ,恢复 的时候onResume

12、生命周期中的各个方法中都可以做什么?

onCreate: 在这里创建界面,做一些数据的初始化工作

onStart: 到这一步变成用户可见不可交互的

onResume: 变成和用户可交互的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)

onRestart:重新启动activity时调用。该活动仍在栈中,而不是启动新的活动

onPause: 到 这一步是可见但不可交互的,系统会停止动画等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在 onResume里读出来,注意:这个方法里做的事情时间要短,因为下一个activity不会等到这个方法完成才启动 。

onstop: 变得不可见,被下一个activity覆盖了

onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉,可以用 isFinishing()来判断它,如果你有一个Progress Dialog在线程中转动,请在onDestroy里把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛异常的。

onPause,onstop, onDestroy,三种状态下 activity都有可能被系统干掉为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般 都是数据库)。实际工作中因为生命周期的变化而带来的问题也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀 掉还是数据回滚,是吧?因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意

13、让Activity变成一个窗口:Activity属性设定

你只需要设置一下Activity的主题就可以了在AndroidManifest.xml 中定义 Activity的地方一句话: Xml代码 android :theme="@android :style/Theme.Dialog" android:theme="@android :style/Theme.Dialog" 这就使你的应用程序变成对话框的形式弹出来了,或者 Xml代码 android:theme="@android :style/Theme.Translucent" android:theme="@android :style/Theme.Translucent

14、后台的Activity被系统回收怎么办:(onSaveInstanceState )

当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B 这个时候A会执行

Java代码

public void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

outState.putLong("id", 1234567890);

}

public void onSaveInstanceState(Bundle outState) {

B 完成以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回 收的A就要重新调用onCreate()方法,不同于直接启动的是这回 onCreate()里是带上参数 savedInstanceState,没被收回的就还是onResume就好了。 savedInstanceState是一个Bundle对象,你基本上可以把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,如果正常启动onCreate就不会有它,所以用的时候要判断一下是否为空

Java代码

if(savedInstanceState !=null){

long id =savedInstanceState.getLong("id");

}

if(savedInstanceState !=null){ 就像官方的Notepad教程 里的情况,你正在编辑某一个note,突然被中断,那么就把这个note的id记住,再起来的时候就可以根据这个id去把那个note取出来,程序就完整一些。这也是看你的应用需不需要保存什么,比如你的界面就是读取一个列表,那就不需要特殊记住什么,哦, 没准你需要记住滚动条的位置.

15、四 调用与被调用:我们的通信使者Intent

要 说Intent了,Intent就是这个这个意图,应用程序间Intent进行交流,打个电话啦,来个电话啦都会发Intent, 这个是Android架构的松耦合的精髓部分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打电话

Java代码 :

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:"+ number));

startActivity(intent);

扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这个部分设计地确实很好啊。 那Intent通过什么来告诉系统需要谁来接受他呢? 通常使用Intent有两种方法,第一种是直接说明需要哪一个类来接收代码如下:

Java代码

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

intent.getExtras().putString("id","1");

startActivity(intent);

第一种方式很明显,直接指定了MyActivity为接受者,并且传了一些数据给MyActivity,在MyActivity里可以用getIntent()来的到这个intent和数据

第二种就需要先看一下AndroidMenifest中的intentfilter的配置

Xml代码

这里面配置用到了action, data, category这些东西,那么聪明的你一定想到intent里也会有这些东西,然后一匹配不就找到接收者了吗?

16.listview你是怎么优化的

17,IPC及原理

IPC是内部进程通信的简称, 是共享"命名管道"的资源。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S模式的访问。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理
18.Android多线程

19.Android为什么要设计4大组件,他们之间的联系

主要是为了实现MVC模式

20、DDMS与TraceView的区别?

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

21、.在Java中如何引入C语言

可以用JNI接口来实现

22、Android国际化与本地化

internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。 一般说明一个地区的语言时,用 语言_地区的形式,如 zh_CN, zh_TW. 各国语言缩写 http://www.loc.gov/standards/iso639-2/php/code_list.php 国家和地区简写 http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html android 对i18n和L10n提供了非常好的支持。android没有专门的API来提供国际化,而是通过对不同resource的命名来达到国际化,同时这种命名方法还可用于对硬件的区分,如不同的新视屏用不同的图片

我们以不同的local和region来做一次国际化,首先values表示默认的字符串,也即当Resource找不到匹配的资源时,默认使用values文件夹下的资源,其余 drawable等资源也是同样的。 当命名这些文件夹的名字时,不同的选项用-分开,而且次序必须和 andorid 文档中table http://developer.android.com/guide/topics/resources/resources-i18n.html#AlternateResources 文件夹的命名必须都是小写字符,否则在一些大小敏感的文件系统中可能会出错,如果你用大写,eclipse的adt都会自动报错。小写字母r表示region的意思。 上图命名了中文简体和繁体以及默认选项,在strings.xml中除了字符串本身不一样,xml中定义该字符串的名字,id都是一样的。所以在代码或者xml中引用该资源时,只要引用名字即可或者id即可,程序启动时候Resource类回到相应的目录下去寻找正确的字符串(资源) 通过在Settings中设置locale& Text 我们可以让Resource类来选择相应文件夹下的内容, 选择英语时候结果如下,也即选择了 values下的strings.xml 选择 chinese(china)时,也即选了 values-zh-rcn目录下的strings.xml 选择 chinese(taiwan)时,也即选了 values-zh-rtw目录下的strings.xml 其余手机的选项,像屏幕的像素等都可以建立相应得目录

23、在eclipse的工程中,res目录有默认几项resource,如 drawable, layout,menu,values 其余还有哪些?

res/anim/ 用来放置动画

res/xml/ 用来放置style theme等xml定义。

res/raw/ 用来放置data数据

24、Android常用的控件

单选框(RadioButton与RadioGroup):

RadioGroup用于对单选框进行分组,相同组内的单选框只有一个单选框被选中。 事件:setOnCheckedChangeListener(),处理单选框被选择事件。把RadioGroup.OnCheckedChangeListener实例作为参数传入。

多选框(CheckBox): 每个多选框都是独立的,可以通过迭代所有的多选框,然后根据其状态是否被选中在获取其值。 事件:setOnCheckChangeListener()处理多选框被选择事件。把CompoundButton.OnCheckedChangeListener实例作为参数传入

下拉列表框(Spring): Spinner.getItemAtPosition(Spinner.getSelectedItemPosition());获取下拉列表框的值。 事件:setOnItemSelectedListener(),处理下拉列表框被选择事件把AdapterView.OnItemSelectedListener实例作为参数传入;

拖动条(SeekBar): SeekBar.getProgress()获取拖动条当前值 事件:setOnSeekBarChangeListener(),处理拖动条值变化事件,把SeekBar.OnSeekBarChangeListener实例作为参数传入。

菜单(Menu): 重写Activity的onCreatOptionMenu(Menu menu)方法,该方法用于创建选项菜单,当用户按下手机的"Menu"按钮时就会显示创建好的菜单,在onCreatOptionMenu(Menu Menu)方法内部可以调用Menu.add()方法实现菜单的添加。 重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件。

进度对话框(ProgressDialog): 创建并显示一个进度对话框:ProgressDialog.show(ProgressDialogActivity.this,"请稍等","数据正在加载中....",true); 设置对话框的风格:setProgressStyle() ProgressDialog.STYLE_SPINNER 旋转进度条风格(为默认风格) ProgressDialog.STYLE_HORIZONTAL 横向进度条风格

25、Android系统架构

1、应用程序. Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。

2.应用框架: 开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统, 其中包括;

* 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。

* 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据

* 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 * 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。

* 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

3、系统运行库

1)程序库 Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:

* 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。

* 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。

* Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。

* LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

* SGL - 底层的2D图形引擎

* 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。

* FreeType -位图(bitmap)和矢量(vector)字体显示。

* SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。 2)Android 运行库 Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。 Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制

4)Linux内核

Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层

26、开机自启动程序

27、什么是Activity?

通俗一点说Activity就是一个界面,这个界面里面可以放置各种控件。Activity的界面也是用xml文件表示的,放置在res->layout下面。每生成一个新的Activity后,我们需要在AndroidManifest.xml中注册一下这个activity

28、 两个Activity之间跳转时必然会执行的是哪几个方法。

onCreate() //在Activity生命周期开始时调用 onRestoreInstanceState()//用来恢复UI状态 onReStart()//当Activity重新启动时调用 onStart()//Activity对用户即将可见时调用 onResume()//当Activity与用户交互时,绘制界面 onSaveInstanceState()//activity即将移出栈顶保留UI状态时调用 onPause()//暂停当前活动activity,提交持久数据的改变,停止动画和其他占用CPU资源的东西,由于下一个activity在这个方法返回之前不会resume,所以这个方法的代码执行要快。 onStop()//activity不再可见时调用 onDestroy()//在Activity销毁钱被调用的最后一个方法。

29、横竖屏切换时候Activity的生命周期。

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

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

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

30、 如何退出Activity?如何安全退出已调用多个Activit

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章