zoukankan      html  css  js  c++  java
  • 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来调用本地的通讯录功能,不知道如何解答。

     

  • 相关阅读:
    不成熟打地鼠游戏
    代码
    简单的JS功能
    json取数据问题
    ojdbc14.jar 与ojdbc6.jar的区别
    IIS6.0开启gzip压缩
    column 'XXXX' in field list is ambiguous
    Struts bean:define标签用法
    hibernate 学习笔记
    The content of element type "strutsconfig" must match "(displayname?,descr
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3036005.html
Copyright © 2011-2022 走看看