分享一波Android面试题

Android开发面试题

1. String 、StringBuilder和StringBuffer的区别

JAVA 平台提供了两个:String 和StringBuffer ,它们可以储存和操作字符串,既包含多个字符串和数据。String类提供了数值是不可更改的字符串。StringBuffer 类提供的字符串可以进行修改,你可以使用StringBuffer来动态构造字符数据。StringBuilder 类提供的字符串可以进行修改。前者线程安全,后者非线程安全(效率高)。

2.int 和Integer有什么区别

JAVA提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是JAVA的原始数据类型,Integer是JAVA为int提供的封装类。JAVA为每个原始类型提供了封装类。

原始类型           封装类

boolean             Boolean 

char                Character 

byte                Byte  

short               Short  

int                 Integer 

long                Long  

float                Float 

double              Double

引用类型和原始类型的行为完全不同,并且他们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构储存,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。

3.一条最长的短信约占多少个Byte

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

 

4.SIM卡和EF文件(存储文件)有何作用

SIM卡的文件系统有自己的规范,主要为了和手机通讯,SIM卡本身有自己的操作系统。EF文件用作储存和手机通讯。

 

5.Android中的动画有哪几类,它们的特点和区别是什么(增加了属性动画。。应该是三种)

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

最后一种是属性动画

 

 

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

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

 

7.MVC模式的原理

在Android中的运用MVC(Model_View_Controller)“模型—视图—控制器”。MVC应用程序总是由这三个部分组成。Event(事件)导致

Controller改变Model或View,或者同时改变两者。只要Controller改变了Model的数据或者属性,所有依赖的View都会自动更新。

 

8.横竖屏切换的时候Activity的生命周期

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

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

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

 

9.Intent传递数据时,可以传递哪些数据

1、一般的数据类型:通过Intent.putExtra();传值,通过 Intent.getExtra();接收。

2、数据的Uri: 通过 Intent.setData();传值,通过Intent.getData();接收。

 

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

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

 

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

会如nullpointException TextView没有初始化时,却调用了其方法。打开控制台,查看logcat找出异常并修改。

 

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

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

 

13.Android引入广播机制的用意

1、从MVC的角度考虑(应用程序内),现在的移动开发模型基本上也是照搬Web那一套MVC架构,只不过是改了点嫁妆而已。Android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。

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

3、效率上(参考UDP的广播协议在局域网的方便性)

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

 

14.什么是Activity

Android的四大组件之一,一般的,一个用户交互界面对应一个Activity,Activity是Context的子类,同时实现Windows.callback和keyevent.callback,可以处理与窗体用户交互的事件。开发常用的有:ListActivity,PerenceActivity等,如果界面有共同的特点或者功能的时候可以自定义一个BaseActivity。

 

15.Android的存储方式

1、文件

2、数据库

3、sharedPreference

4、网络

 

16.Android中常用的五种布局

1、LinearLayout — 线性布局

Orientation — 容器内元素的排布方式

Vertical — 子元素们垂直排布

Horizontal — 子元素们水平排布

Gravity — 内容排布形式。常用的有left、top、right、bottom、center等

 

2、AbsoluteLayout — 绝对布局

layout_x — x坐标,以左上为顶点

layout_y — y坐标,以左上为顶点

 

3、TableLayout — 表格布局

表格布局主要以行列的形式来管理子控件,其中每一行即一个TableRow对象,每个TableRow对象可以添加子控件,并且每加入一个控件即相当于添加了一列。

 

4、RelativeLayout — 相对布局

layout_centerInPerent — 将当前元素放置于其容器内的水平方向和垂直方向的中央位置

类似的属性有:layout_centerHorizontal,layout_centerVertical,layout_alignPerentLeft等

layout_marginLeft — 设置当前元素相对于其容器左侧边缘的距离

layout_below — 放置当前元素到指定的元素的下面

layout_alignRight — 当前元素与指定元素右对齐

 

5、FrameLayout — 帧布局

以左上角为起点,将FrameLayout内的元素一层覆盖一层的显示。在帧布局中,先添加的图片会被后添加的图片覆盖。

 

17.如何启用Service,又如何停用

1、第一种是通过调用Context.startService()启动,调用Context.stopService()结束,startService()可以传递参数给Service

2、第二种方式是通过调用Context.bindService()启动,调用Context.unbindService()结束,还可以通过ServiceConnection访问Service,在Service每一次的开启关闭过程中,只有onStart可以被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestroy在一个生命周期中只能被调用一次。

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

1,AIDL全称Android Interface Definition Language(Android接口描述语言) 是一种接口描述语言。

2,编译器可以通过AIDL文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象访问的目的.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 如果要使用AIDL, 需要完成2件事情:

1. 引入AIDL的相关类.;

2. 调用AIDL产生的class.理论上, 参数可以传递基本数据类型和String, 还有就是Bundle的派生类, 不过在Eclipse中,目前的ADT不支持Bundle做为参数。

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

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

(2). String, CharSequence不需要特殊声明。

(3). List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其他支持的类型.

19.Handler机制的原理

Android提供了Handler和Looper来满足线程间的通信。Handler遵循先进先出的原则,Looper类用来管理特定线程内对象之间的消息交换。

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。

20.Activity的生命周期

1、onCreate(Bundle savedInstanceState):创建Activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问。

2、onStart():Activity变为在屏幕上对用户可见时调用。

3、onResume():Activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。

4、onPause():Activity被暂停或收回CPU和其他资源时调用,该方法用于保存活动状态的Activity。

5、onStop():Activity被停止并转为不可见阶段及后续的生命周期事件时调用。

6、onRestart():重新启动Activity时调用。该活动仍在栈中,而不是启动新的活动。

7、onDestroy():Activity被完全从系统内存中移除时,该方法被调用。

21.两个Activity之间跳转必须要执行哪些方法

1、onCreate()   在Activity生命周期开始时调用

2、onRestoreInstanceState()   用来恢复UI状态

3、onRestart()   当Activity重新调用时启动

4、onStart()   Activity对用户即将可见时调用

5、onResume()   当Activity对用户交互时绘制界面

6、onSavedInstanceState()   Activity即将移出栈顶保留UI状态时调用

7、onPause()   暂停当前活动Activity,提交持久数据的改变,停止动画和其他占用CPU资源的东西,用于下一个Activity在这个方法返回之前不会Resume,所以这个方法的代码执行要快。

8、onStop()   Activity不可见时调用

9、onDestroy()   在Activity销毁线程被调用的最后一个方法

 

22.Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

答:12,-11

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

最好是保存在onStart()函数中进行

24.Intent传递数据时,哪些数据类型可以被传递?

1、Seria lizable//传对象

2、charS equence//字符队列

3、Parce lable//传对象

4、Bundle

25.关于res/raw目录下的文件

res/raw目录下的文件是原封不动的存储到设备上,不会转换为二进制的格式。

 

26.Android的四大组件

1、Activity

2、Service

3、Broadcast

4、Contentprovider

27.Android中实现Service的方法,和它们的生命周期。

1、startService

onCreate()

onStartCommand()

onDestroy()

2、bindService

onCreate()

onBind()

onUnbind()

onDestroy()

 

28.Activity的生命周期

必调用的三个方法:onCreate()→onStart()→onResume()。

1、              父Activity启动子Activity,子Activity退出,父Activity调用顺序如下:onCreate()→onStart()→onResume()→onPause()→onStop()→onRestart()→onStart()→onResume()

2、              用户点击Home键,Activity调用顺序如下:onCreate()→onStart()→onResume()→onPause()→onStop()→Maybe→onDestroy()

3、              调用finish(),Activity调用顺序如下:onCreate()→onStart()→onResume()→onPause()→onStop()→onDestroy()

4、              在Activity上显示Dialog,Activity调用顺序如下:onCreate()→onStart()→onResume()→onPause()

5、              在父Activity上显示透明的或非全屏的Activity,Activity调用顺序如下:onCreate()→onStart()→onResume()→onPause()

6、              设备进入睡眠状态,Activity调用顺序如下:onCreate()→onStart()→onResume()→onPause()

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

除了在栈顶的Activity,其他的Activity都有可能在内存不足的时候被系统回收,一个Activity越处于栈底,被系统回收的可能性越大。

protected void onSavedInstanceState(Bundle outState){

super. onSavedInstanceState(outState);

outstate.putLong(“id”,1234567890);

}

public void onCreate(Bundle savedInstanceState){

//判断savedInstanceState是不是为空

//如果不为空就取出来

super.onCreate(savedInstanceState);

}

30.注册广播有几种方式,这些方式有何优缺点?

两种。一种是在配置文件中注册,另一种是在Java代码中注册,在Java代码中注册的广播随着Activity的销毁而停止运行。

31.请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。

一个Handler允许你发送和处理Message和Runable对象,这些对象和一个线程的Message Queue相关联。每一个线程实例和一个单独的线程以及该线程的MessageQueue相关联。当你创建一个新的Handler时,它就和创建它的线程绑定在一起了。这里,线程我们也可以理解为线程的MessageQueue。从这一点上来看,Handler把Message和Runable对象传递给MessageQueue,而且在这些对象离开MessageQueue时,Handler负责执行他们。

  Handler有两个主要的用途:(1)确定在将来的某个时间点执行一个或者一些Message和Runnable对象。(2)在其他线程(不是Handler绑定线程)中排入一些要执行的动作。

  Scheduling Message,即(1),可以通过以下方法完成:

  post(Runnable):Runnable在handler绑定的线程上执行,也就是说不创建新线程。

  postAtTime(Runnable,long):

  postDelayed(Runnable,long):

  sendEmptyMessage(int):

  sendMessage(Message):

  sendMessageAtTime(Message,long):

  sendMessageDelayed(Message,long):

  post这个动作让你把Runnable对象排入MessageQueue,MessageQueue受到这些消息的时候执行他们,当然以一定的排序。sendMessage这个动作允许你把Message对象排成队列,这些Message对象包含一些信息,Handler的hanlerMessage(Message)会处理这些Message.当然,handlerMessage(Message)必须由Handler的子类来重写。这是编程人员需要作的事。

  当posting或者sending到一个Hanler时,你可以有三种行为:当MessageQueue准备好就处理,定义一个延迟时间,定义一个精确的时间去处理。后两者允许你实现timeout,tick,和基于时间的行为。当你的应用创建一个新的进程时,主线程(也就是UI线程)自带一个MessageQueue,这个MessageQueue管理顶层的应用对象(像activities,broadcast receivers等)和主线程创建的窗体。你可以创建自己的线程,并通过一个Handler和主线程进行通信。这和之前一样,通过post和sendmessage来完成,差别在于在哪一个线程中执行这么方法。在恰当的时候,给定的Runnable和Message将在Handler的MessageQueue中被Scheduled。

  Message简介:

  Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来传递给Handler.Message对象提供额外的两个int域和一个Object域,这可以让你在大多数情况下不用作分配的动作。

  尽管Message的构造函数是public的,但是获取Message实例的最好方法是调用Message.obtain(),或者Handler.obtainMessage()方法,这些方法会从回收对象池中获取一个。

  MessageQueue简介:

  这是一个包含message列表的底层类。Looper负责分发这些message。Messages并不是直接加到一个MessageQueue中,而是通过MessageQueue.IdleHandler关联到Looper。

  你可以通过Looper.myQueue()从当前线程中获取MessageQueue。

  Looper简介:

  Looper类被用来执行一个线程中的message循环。默认情况,没有一个消息循环关联到线程。在线程中调用prepare()创建一个Looper,然后用loop()来处理messages,直到循环终止。

  大多数和message loop的交互是通过Handler。

  下面是一个典型的带有Looper的线程实现。

  class LooperThread extends Thread {

  public Handler mHandler;

  public void run() {

  Looper.prepare();

  mHandler = new Handler() {

  public voidhandleMessage(Message msg) {

  // process incomingmessages here

  }

  };

  Loo per.loop();

  }

  }

 

32.谈谈intent在android中的作用是什么?

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

 

33.android中最常用的几种解析方式是什么?

答:SAX,  DOM,  PULL,  JSON

 

34.当启动一个Activity采用何种方式启动新的Activity执行完毕后需要返回值至当前Activity,并且需要什么方法来获取数据?

答:startActivityResult(),    onActivityResult()

 

35.final,finally,finalize的区别

Final用于声明属性,方法和类,分别表示属性不可改变,方法不可覆盖,类不可继承。

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

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

 

36.String s = new String(“xyz”);创建了几个String Object?

2个。一个s的引用地址,一个存放xyz的存放地址 s存放xyz的地址。

37.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会执行,什么时候执行,在return前还是后?

会执行,在return之前执行。

38.什么是ANR 如何避免它?

答:ANR:Application NotResponding,在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:对输入事件(如按键、触摸屏事件)的响应超过5秒

意向接受器(intentReceiver)超过10秒钟仍未执行完毕

Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。

 

39.造成Android应用内存溢出的可能性有哪些?

1、查询数据库没有关闭游标

2、构造Adapter时,没有使用缓存的convertView

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

4、释放对象的引用

5、其他

 

40.Service是否在main Thread中执行,Service里面是否执行耗时操作?

默认情况,如果没有显示的指定Service所运行的进程,Service和Activity是运行在当前App所在进程的main Thread(UI主线程)里面。Service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件),在子线程中执行(耗时的操作都是放到子线程里面执行,例如获取服务端数据,下载图片,视频等等)

new Thread(){}.start();

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

<Service android:process=”cn.itcast.xxx”></Service>

 

41.Android四种启动模式是哪四种?能否介绍一下各自的作用?

答:standrad、singletop、singletask、singleinstance。

Standrad的功能是:默认模式,可以不用写在配置文件里面,可以有多个相同的事例,也允许多个activity叠加。例如:

若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么如果我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……

点back键会依照栈顺序依次退出。

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

例如:若我有两个Activity名为B1,B2,两个Activity内容功能完全相同,都有两个按钮可以跳到B1或者B2,唯一不同的是B1为standard,B2为singleTop。

若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)

若我意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。

Singletask的功能是:只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

 

例如:

若我的应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,无论我在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,但是C2只会存在一个,并且这三个Activity都在同一个task里面。

但是C1->C2->C3->C2->C3->C1-C2,这样的操作过程实际应该是如下这样的,因为singleTask会把task中在其之上的其它Activity destory掉。

操作:C1->C2

      C1->C2->C3

C1->C2->C3->C2  

C1->C2->C3->C2->C3->C1    

C1->C2->C3->C2->C3->C1-C2

 

实际:C1->C2

      C1->C2->C3  

C1->C2

C1->C2->C3->C1

      C1->C2

 

若是别的应用程序打开C2,则会新启一个task。

如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskId不会为200,例如C2的taskId为201,那么再从C2打开C1、C3,则C2、C3的taskId仍为201。

注意:如果此时你点击home,然后再打开Other,发现这时显示的肯定会是Other应用中的内容,而不会是我们应用中的C1 C2 C3中的其中一个。

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

例如:

程序有三个ActivityD1,D2,D3,三个Activity可互相启动,其中D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。

 

若是在别的应用程序打开D2,假设Other的taskId为200,打开D2,D2会新建一个task运行,假设它的taskId为201,那么如果这时再从D2启动D1或者D3,则又会再创建一个task,因此,若操作步骤为other->D2->D1,这过程就涉及到了3个task了。

42、TCP和UDP的区别:

1、TCP协议在传送数据段的时候要给段标记;UDP协议不用

2、TCP协议可靠;UDP协议不可靠

3、TCP协议是面向连接,UDP协议采用无连接

4、TCP协议负载较高,采用虚拟电路;UDP采用无连接

5、TCP协议的发送方面需要确认接受方是否接受到数据段

6、TCP协议采用窗口技术和流程制

Android开发笔试题

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.以下程序的运行结果为(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 args[]){

System.out.println(i);

}

}

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

B、         Null

C、         1

D、        0

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

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

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

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

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

7.下列程序段的输出结果是:(B)

void complicatedexpression_r () {

int x = 20;

int 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

8.Android中下列属于Intent的作用的是(C)

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

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

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

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

9.下列属于SAX解析XML文件的优点的是(B)

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

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

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

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

10.下面的对自定义style的方式正确的是(A)

A、<resources>

      <style name=”myStyle”>

      <item name=”android:layout_width”>fill_parent</item>

      </style>    

      </resources>

B、<style name=”myStyle”>

      <item name=”android:layout_width”>fill_parent</item>

      </style>

C、<resources>

      <item name=”android:layout_width”>fill_parent</item>

      </resources>

D、<resources>

      <style name=”android:layout_width”>fill_parent</style>

      </resources>

11.在SQL Server 2005中运行如下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

12.请简述下ContentProvider是如何实现数据共享的。

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

13.Android项目工程下面的assets目录的作用是什么?(B)

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

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

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

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

14.下列对Android NDK的理解正确的是(ABCD)

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

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

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

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

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

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

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

Linux Kernel(Linux内核)

Libraries(系统运行库或者是C/C++核心库)

ApplicationFramework(开发框架包)

Applications(核心应用程序)

17.如何将一个Activity设置成窗口的样式?

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

18.List、Set、Map是否继承自Collection接口?

List、Set是;Map不是

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

普通的Service,默认运行在UI main主线程SDK给我们提供方便的,带有异步处理的Service类,异步处理的方法是onHandleIntent()(处理耗时的操作)。

20.为什么要用ContentProvider?它和SQL的实现上有什么差别?

屏蔽了数据储存的细节,对用户透明,用户只需要关心操作数据的Uri就可以了,对应的参数,不同App之间共享,操作数据但是ContentProvider还可以去增删改查本地文件,XML文件的读取、更改,网络数据读取更改SQL也有增删改查的方法。

21.下面说法正确的是:(A)

public class Test{

public static void main(String []args){

static int []num = new int[10];

System.out.println(num[10]);

}

}

A、            程序编译失败

B、            程序编译成功,运行时抛出异常

C、            程序编译成功,运行时输出结果为0

D、            如果将System.out.println(num[10])修改为    System.out.println(num[9])输出结果将为0

 

解释:只有类才存在静态的变量,方法只能对静态变量操作,不能在方法内试图定义静态变量,否则的话会抛出编译错误。静态变量的本意是为了让所有的对象共享这个变量。如果在方法里面定义静态变量的话就存在逻辑错误,也达不到你想要的目的。因为在方法中定义静态变量根本没有他的任何意义。任何对象都有自己的方法,即使是静态方法,方法内的变量也是在方法调用时才开始分配内存,所以想给方法中的变量成静态的在逻辑上存在问题。

22.下列语句中,正确的是:(ABD)

A、int Se, a, b = 10;(整型赋值给整型)

B、char c, d = ‘a’;(字符型赋值)

C、float e = 0.0d;(双精度型不能转换成单精度型,转换需要强制类型转换)

D、double c = 0.0f;(单精度型可以复制给双精度型)

23.下面哪一个是Java最基本元素:(D

A、接口

B、方法

C、包

D、对象(java是面向对象编程)

24.下面关于抽象类的理解。错误的是:(A

A、构造方法可以声明抽象类型

B、抽象方法必须被子类的方法覆盖

C、不允许实现抽象方法

D、方法申明中,static和abstract不能同时存在

 

解释:java抽象类的构造方法和普通类的构造方法一样都是用来初始化类,只是抽象类的构造方法不能直接调用 因为抽象类不能实现实例

但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数,也可以使用其方法,可以这么理解吧 抽象类就是一个不能实例化的不同类,不过如果方法加了abstract那么就必须在子类里面重写了。

 

25Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)

答:匿名内部类是没有名字的内部类,不能extends()继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

 

26.谈谈Android的优缺点和不足之处:

优点:

1、     开放性、开源

2、     挣脱运营商束缚

3、     丰富的硬件选择

4、     不受任何限制的开发商

5、     无缝结合的Google应用

缺点:

1、     安全问题、隐私问题                                 

2、     卖手机的不是最大运营商

3、     运营商对Android手机仍然有影响

4、     山寨化严重

5、     过分依赖开发商,缺乏标准配置

 

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

     

      Android程序执行需要读取到安全敏感项必须在androidmanifest.xml中声明相关权限请求,打电话,访问网络,获取坐标,读写sd卡,读写联系人等…安装的时候会提示用户…文件系统的权限是linux权限。比如说sharedpreference里面的

Context.Mode.private , Context.Mode.word_read_able

Context.Mode_word_writeable

28、如何退出Activity?如何安全退出已调用多个ActivityApplication

1、抛异常强制退出:该方法通过抛异常,使程序Force Close。

验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。

2、记录打开的Activity:每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

3、发送特定广播:在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。

4、递归退出:在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

上面是网上的一些做法。其实可以通过intent的flag来实现。Intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一个新的activity,然后在新的ativity的oncreate方法里面finish掉。

 

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

 

答:这个问题问的很山寨,默认不做任何处理,B里面的音乐都能播放。遇到问题,可以随机应变,灵活发挥,多考虑些细节,比如说这个题就可以这样说,说说你对startActivityForResult的理解()

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

 

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

答:找到浏览器的浏览器意图,传递数据的URI,激活这个意图。

 

31.android虚拟机的理解,包括内存管理机制垃圾回收机制

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16,谈谈加载图片的时候怎么处理大照片的,垃圾回收,没有引用的对象,在某个时刻会被系统gc(回收)掉。

 

32.ListView如何提高其效率?

复用convertview ,异步加载数据,分页加载数据,使用静态的view对象避免创建过多的view.

 

33.启动应用后,改变系统语言,应用的语言会改变么?

不会。

 

34.说说Activity,Intent,Service是什么关系?

麦当劳和麦当娜的关系、这种问题,就讲下activity,讲一下service,说一下通过intent去激活组件,传递数据,说自己项目中有这样一个网络更新的功能,显示界面就用的activity,后台有个Service每隔半个小时都去访问下服务器获取更新的数据…开启服务用的是intent来开启。

 

35.下列选项哪个不是Activity启动的方法?(A

A、goToActivity

B、startActivity

C、startActivityFromChild

D、startActivityFoResult

 

36、解析xml的方法有(CDE

A、字符器类型

B、流方式

C、dom

D、SAX

E、PULL

37.内部类有时为什么要用final修饰?

内部类使用外部的变量时,其实就是内部类对象引用外部变量,当内部类引用外部变量时,外部变量可能死亡或者销毁,为了延续生命周期,就要把外部变量复制到内部类中,但是复制不具有统一性,所以用final保证其统一性!

 

转载于:https://my.oschina.net/u/2355512/blog/725964

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值