2013年4月19日--佳都新太笔试题+解答

佳都新太Android笔试题

1. 请描述下Activity的生命周期

答:创建 onCreate-  启动onStart – 开始onResume – 暂停 onPause – 结束onStop – 销毁onDestroy

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

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

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

答:两种方法:

在AndroidManifest.xml设置当前Activity的一个主题属性

android :theme="@android:style/Theme.Dialog"  

    或者android:theme="@android:style/Theme.Translucent"  

通过修改Theme.Dialog主题的android:windowBackground属性值可以改变Activity的背景图像

style.xml下增加以下内容

<style name= “MyTheme” parent= “@android:style/Theme.Dialog>

<item name= “android:windowBackground”>@drawable/msg_background</item>

</style>

在manifest.xml中直接指定Activity的theme就行了

<activity android:name= “.MainActivity” android:label= “@string/app_name”android:theme= “@style/MyTheme”>

<intent-filter>

     <actionandroid:name= “android.intent.action.MAIN”/>

     <categoryandroid:name= “android.intent.category.LAUNCHER”/>

  </intent-filter>

</activity>

4. 按下返回键与Home键的区别。

答:back键默认行为是finish处于前台的Activity的,即Activity的状态为Destroy状态为止,再次启动该Activity是从onCreate开始的(不会调用onSaveInstanceState()方法)。Home键默认是stop前台的Activity即状态为onStop为止,而不是Destroy,若再次启动它,会调用onSaveInstanceState()方法,保持上次Activity的状态则是从OnRestart开始的---->onStart()--->onResume()。

5. 请介绍下Android中常用的几种布局。

答:

1、 LinearLayout– 线性布局。
orientation – 容器内元素的排列方式。vertical: 子元素们垂直排列;horizontal: 子元素们水平排列
gravity – 内容的排列形式。常用的有 top, bottom, left, right, center 等

2、AbsoluteLayout – 绝对布局。
layout_x – x 坐标。以左上角为顶点
layout_y – y 坐标。以左上角为顶点

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

4、RelativeLayout – 相对布局。
layout_centerInParent – 将当前元素放置到其容器内的水平方向和垂直方向的中央位置(类似的属性有:layout_centerHorizontal,layout_alignParentLeft 等)
layout_marginLeft – 设置当前元素相对于其容器的左侧边缘的距离
layout_below – 放置当前元素到指定的元素的下面
layout_alignRight – 当前元素与指定的元素右对齐

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

 

6. 请介绍下Android的数据存储方式,以及优缺点。

Ø  SharedPreferences方式

用来存储”key-value paires”格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型,可以通过它保存一些上次用户所做的修改操作

Ø  文件存储方式

它通过FileInputStream和FileOutputStream对文件进行操作。但是在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件,如果要共享数据就用Content Providers

Ø  SQLite数据库方式

Android提供的一个标准的数据库,支持SQL语句

Ø  内容提供器(Contentprovider)方式

是所有应用程序之间数据存储和检索的桥梁,它的作用是使得各个应用程序之间实现数据共享

Ø  网络存储方式

通过网络来存储和获取数据

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

答:一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数据库中表的方式将数据暴露。Contentproviders存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。要想使应用程序的数据公开化,可通过2种方法:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Contentprovider的权限。

 

8. 如何启用Service,如何停用Service.

答:

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

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

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

答:注册广播有两种方式:

1、在应用程序的代码中注册 
注册BroadcastReceiver: 
registerReceiver(receiver,filter); 
取消注册BroadcastReceiver: 
unregisterReceiver(receiver); 
当BroadcastReceiver更新UI,通常会使用这样的方法注册。启动Activity时候注册BroadcastReceiver,Activity不可见时候,取消注册。 
   2、在androidmanifest.xml当中注册 
<receiver> 
   <intent-filter> 
    <action android:name="android.intent.action.PICK"/> 
   </intent-filter> 
</receiver> 
使用这样的方法注册弊端:它会始终处于活动状态,毕竟是手机开发,cpu和电源资源比较少,一直处于活动耗费大,不利。 

引入广播机制的用意:

a:引入广播机制可以方便几大组件的信息和数据交互。

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

c:效率上(参考UDP的广播协议在局域网的方便性) d:设计模式上(反转控制的一种应用,类似监听者模式

10.Android如何进行进程间通信,怎么实现?

答:Android提供了AIDL来实现进程间通信(IPC),AIDL全称为Android Interface Definition Language。

简历里AIDL服务的具体步骤如下:

1.   在Eclipse Android工程中的Java源文件目录中建立一个扩展名为aidl的文件。该文件的语法类似于Java代码,但会稍有不同。

2.   如果aidl文件的内容正确的话,ADT会自动生成一个Java接口文件(*.java).

3.   建立一个服务类(Service的子类)

4.   实现由aidl文件生成的Java接口。

5.   在AndroidManifest.xml文件中配置AIDL服务,尤其要注意的是,<action>标签中android:name的属性值就是客户端要引用该服务的ID,也就是Intent类构造方法的参数值。

 

11.Android提供给第三方调用的方式有哪几种,优缺点分别是什么?

答:第三方调用的方式?不理解是什么!

12.什么是ANR,如何避免ANR?

答:

ANR:ApplicationNot Responding,五秒在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了:

对输入事件(如按键、触摸屏事件)的响应超过5秒

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

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

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

13.如果实现一个web app来调用本地的通讯录功能?

答: 没有使用webapp来调用本地的通讯录功能,不知道如何解答。

 

 

你可能感兴趣的:(笔试题)