zoukankan      html  css  js  c++  java
  • Android面试题收集(有具体答案)

    Android面试题目及其答案

     

    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,160个字节。

     

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

     

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

     

    7、handler机制的原理

     

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

     

      1)Looper: 一个线程能够产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。

     

      2)Handler: 你能够构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从MessageQueue取出)所送来的消息。

     

      3) Message Queue(消息队列):用来存放线程放入的消息。

     

      4)线程:UI thread 通常就是mainthread,而Android启动程序时会替它建立一个MessageQueue。

     

    8、说说mvc模式的原理,它在android中的运用

     

     MVC(Model_view_controller)”模型_视图_控制器”。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同一时候改变两者。仅仅要Controller改变了Models的数据或者属性,全部依赖的View都会自己主动更新。类似的,仅仅要Contro

     

    9、Activity的生命周期

     

      和其它手机平台 的应用 程序 一样,Android的应用程序 的生命周期是被统一掌控 的,也 就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,仅仅能学习 并 适应它。

      简单地说一下为什么是这样:我们手机在执行 一个应用程序的时候,有可能打进来电话 发进来短信 ,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能 ,另 外系统也不同意你占用太多资源 ,至少要保证电话功能吧,所以资源不足的时候也就有可 能被干掉。

     

      言归正传,Activity的基本生命周期例如以下代码 所看到的:

     

      Java代码

     

      1. public

     

      2. class MyActivity extends Activity {

     

      3. protected

     

      4. void onCreate(Bundle savedInstanceState);

     

      5.

     

      6. protected

     

      7. void onStart();

     

      8.

     

      9. protected

     

      10. void onResume();

     

      11.

     

      12. protected

     

      13. void onPause();

     

      14.

     

      15. protected

     

      16. void onStop();

     

      17.

     

      18. protected

     

      19. void onDestroy();

     

      20. }

     

      21.

     

      22.  public  class MyActivity extends Activity {

     

      protected   void onCreate(BundlesavedInstanceState);

     

      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。

     

      具体介绍一下这几个方法中系统在做什么以及我们应该做什么:

     

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

     

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

     

      onResume: 变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个

     

      Activity的最上面,执行完弹出栈,则回到上一个Activity)

     

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

     

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

     

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

     

      onPause,onstop, onDestroy,三种状态 下activity都有可能被系统干掉

     

     为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中由于生命周期的变化而带来的问题也非常多,比方你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?由于Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般我都是採用Android的消息机制[Handler,Message]来处理多线程和界面交互的问题。这个我后面会讲一些,近期由于这些东西头已经非常大了,等我理清思绪再跟大家分享。ller改变了View,View会 从潜在的Model中获取数据来刷新自己。

     

    10、让Activity变成一个窗体:Activity属性设定

     

      讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么非常 简单你仅仅须要设置 一下Activity的主题就能够了在AndroidManifest.xml中定义Activity的地方一句话:

     

      Xml代码

     

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

     

      2.

     

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

     

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

     

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

     

      这就使你的应用程序变成对话框的形式弹出来了,或者

     

      Xml代码

     

      1.android:theme="@android:style/Theme.Translucent"

     

      2.

     

      3. android:theme="@android:style/Theme.Translucent"

     

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

     

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

     

      就变成半透明的,[友情提示-.-]类似的这样的activity的属性能够在android.R.styleable类的AndroidManifestActivity方法中看到,AndroidManifest.xml中全部元素的属性的介绍都能够參考这个类android.R.styleable

     

      上面说的是属性名称,详细有什么值是在android.R.style中 能够看到,比方这个"@android:style/Theme.Dialog"就相应于android.R.style.Theme_Dialog,('_'换成'.'< --注意:这个是文章内容不是笑脸)就能够用在描写叙述文件 中了,找找类定义和描写叙述文件里的相应关系就都明确了。

     

    11、 你后台的Activity被系统回收怎么办:onSaveInstanceState

     

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

     

      Java代码

     

      1. public

     

      2. void onSaveInstanceState(Bundle outState) {

     

      3. super.onSaveInstanceState(outState);

     

      4. outState.putLong("id", 1234567890);

     

      5. }

     

      public

     

      void onSaveInstanceState(Bundle outState) {

     

      super.onSaveInstanceState(outState);

     

      outState.putLong("id", 1234567890);

     

      }

     

      B 完毕以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回 收的A就要又一次调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上參数savedInstanceState,没被收回的就还是onResume就好了。

     

      savedInstanceState是一个Bundle对象,你基本上能够把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,假设正常启动onCreate就不会有它,所以用的时候要推断一下是否为空。

     

      Java代码

     

      1. if(savedInstanceState != null){

     

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

     

      3. }

     

      if(savedInstanceState != null){

     

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

     

      }

     

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

     

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

     

      要说Intent了,Intent就是这个这个意图 ,应用程序间Intent进行交流,打个电话啦,来个 电话啦都会发Intent, 这个是Android架构的松耦合的精髓部分,大大提高了组件的复用性,比方你要在你的应用程序中点击button,给某人打电话,非常easy啊,看下代码先:

     

      Java代码

     

      1. Intent intent = new Intent();

     

      2. intent.setAction(Intent.ACTION_CALL);

     

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

     

    4.startActivity(intent);

     

      Intent intent = new Intent();

     

      intent.setAction(Intent.ACTION_CALL);

     

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

     

      startActivity(intent);

     

      扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统仅仅须要扔出intent就好了,这个部分设计 地确实非常好啊。

     

      那Intent通过什么来告诉系统须要谁来接受他呢?

     

      通常使用Intent有两种方法,第一种是直接说明须要哪一个类来接收代码例如以下:

     

      Java代码

     

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

     

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

     

      3. tartActivity(intent);

     

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

     

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

     

      tartActivity(intent);

     

      第一种方式非常明显,直接指定了MyActivity为接受者,而且传了一些数据给MyActivity,在MyActivity里能够用getIntent()来的到这个intent和数据。

     

      另外一种就须要先看一下AndroidMenifest中的intentfilter的配置了

     

      Xml代码

     

      < intent-filter>

     

      < action

     

      android:name="android.intent.action.VIEW"

     

      />

     

      < action

     

      android:value="android.intent.action.EDIT"

     

      />

     

      < action

     

      android:value="android.intent.action.PICK"

     

      />

     

      < category

     

      android:name="android.intent.category.DEFAULT"

     

      />

     

      < data

     

      android:mimeType="vnd.android.cursor.dir/vnd.google.note"

     

      />

     

      < /intent-filter>

     

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

     

      action事实上就是一个意图的字符串名称。

     

      上面这段intent-filter的配置文件说明了这个Activity能够接受不同的Action,当然对应的程序逻辑也不一样咯,提一下那个mimeType,他是在ContentProvider里定义的,你要是自己实现一个ContentProvider就知道了,必须指定

    mimeType才干让数据被别人使用。

     

      不知道原理说明确没,总结一句,就是你调用别的界面不是直接new那个界面,而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊,并且符合了生命周期被系统管理的原则。

     

      想知道category都有啥,Android为你预先定制好的action都有啥等等,请亲自訪问官方链接Intent

     

      ps:想知道怎么调用系统应用程序的同学,能够细致看一下你的logcat,每次执行一个程序的时候是不是有一些信息比方:

     

      Starting activity: Intent {action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }

     

      再对比一下Intent的一些set方法,就知道怎么调用咯,希望你喜欢:)

     

     

     

     

     

     

     

     

     

      

     

      13、什么是ANR 怎样避免它?

     

      答:ANR:Application Not Responding,五秒

     

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

     

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

     

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

     

      Android应用程序全然执行在一个独立的线程中(比如main)。这就意味着,不论什么在主线程中执行的,须要消耗大量时间的操作都会引发ANR。由于此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

     

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

     

      14、什么情况会导致Force Close ?怎样避免?是否能捕获导致其的异常?

     

      答:一般像空指针啊,能够看起logcat,然后相应到程序中 来解决错误

     

      15、Android本身的api并未声明会抛出异常,则其在执行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?怎样解决?

     

      16、简要解释一下activity、intent 、intentfilter、service、Broadcase、BroadcaseReceiver

     

      答:一个activity呈现了一个用户能够操作的可视化用户界面

     

      一个service不包括可见的用户界面,而是在后台无限地执行

     

      能够连接到一个正在执行的服务中,连接后,能够通过服务中暴露出来的借口与其进行通信

     

      一个broadcast receiver是一个接收广播消息并作出回应的component,broadcastreceiver没有界面

     

      intent:content provider在接收到ContentResolver的请求时被激活。

     

      activity, service和broadcast receiver是被称为intents的异步消息激活的。

     

    一个intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI

     

      Intent对象能够显式的指定一个目标component。假设这种话,android会找到这个component(基于manifest文件里的声明)并激活它。但假设一个目标不是显式指定的,android必须找到响应intent的最佳component。

     

      它是通过将Intent对象和目标的intent filter相比較来完毕这一工作的。一个component的intentfilter告诉android该component能处理的intent。intentfilter也是在manifest文件里声明的。

     

      17、IntentService有何长处?

     

      答:IntentService 的优点

     

      * Acitivity的进程,当处理Intent的时候,会产生一个相应的Service

     

      * Android的进程处理器如今会尽可能的不kill掉你

     

      * 很easy使用

     

      18、横竖屏切换时候activity的生命周期?

     

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

     

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

     

      3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会又一次调用各个生命周期,仅仅会运行onConfigurationChanged方法

     

      

     

     

     

    19. 怎样将SQLite数据库(dictionary.db文件)与apk文件一起公布?

     

      解答:能够将dictionary.db文件拷贝到Eclipse Androidproject中的resaw文件夹中。全部在resaw文件夹中的文件不会被压缩,这样能够直接提取该文件夹中的文件。能够将dictionary.db文件拷贝到resaw文件夹中

     

     20. 怎样将打开res aw文件夹中的数据库文件?

     

      解答:在Android中不能直接打开res aw文件夹中的数据库文件,而须要在程序第一次启动时将该文件拷贝到手机内存或SD卡的某个文件夹中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得resaw文件夹中资源的InputStream对象,然后将该InputStream对象中的数据写入其它的文件夹中对应文件里。在Android SDK中能够使用SQLiteDatabase.openOrCreateDatabase方法来打开随意文件夹中的SQLite数据库文件。

     

      21. Android引入广播机制的用意?

     

      答:a:从MVC的角度考虑(应用程序内)

     

     事实上回答这个问题的时候还能够这样问,android为什么要有那4大组件,如今的移动开发模型基本上也是照搬的web那一套MVC架构,仅仅只是是改了点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制能够方便几大组件的信息和数据交互。

     

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

     

      c:效率上(參考UDP的广播协议在局域网的方便性)

     

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

    1. 请描写叙述下Activity的声明周期。

     onCreate->onStart->onRemuse->onPause->onStop->onRestart->onDestroy

     

     

     

    2. 假设后台的Activity因为某种原因被系统回收,怎样在回收之前保存当前状态。

    onSaveInstanceState().

    程序中的某一个ActivityA 在执行时,主动或被动的执行还有一个新的Activity B,这个时候A会执行onSaveInstanceState()。B完毕以后又回来找A,这个时候有两种情况:一是A被回收,二是A没有被回收,被回收的A就要又一次调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上了參数savedInstanceState;而没被回收的就直接执行onResume(),跳过onCreate()。

     

     

     

    3. 怎样将一个Activity设置成窗体样式。

    在AndroidManifext.xml中Activity定义处加入

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

    android:theme="@android:style/Theme.Translucent"。

     

     

     

     

    4. 怎样退出Activity?怎样安全退出已调用多个Activity的Application?

    1.Activity.finish();

    也能够用killProcess()和System.exit()这个方案

    2.用ActivityManager的restartPackage方法

     

     

     

    5. 请介绍下android大众经常使用的五种布局。

    FrameLayout(框架布局)

    仅仅能够有一个控件,而且不能设计这个控件的位置,控件会放在左上角

    LinearLayout(线性布局)

    一行仅仅能控制一个控件的线性布局,所以当有非常多控件须要在一个界面中列出时,能够用LinearLayout布局

    AbsoluteLayout(绝对布局)

    能够放置多个控件,而且能够自定义控件的x,y的位置

    RelativeLayout(相对布局)

    比方要在一行上显示多个控件,这时就要用到相对布局

    TableLayout(表格布局)

    将子元素的位置分配到行或列中,一个TableLayout由很多的TableRow组成

     

     

    6. 请介绍下android的数据存储方式。

    SharedPreferences方式

    用来存储”key-valuepaires”格式的数据,它是一个轻量级的键值存储机制,仅仅能够存储基本数据类型,能够通过它保存一些上次用户所做的改动操作

    文件存储方式

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

    SQLite数据库方式

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

    内容提供器(Contentprovider)方式

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

    网络存储方式

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

     

     

    7。请介绍下ContentProvider是怎样实现数据共享的。

     Android提供了ContentProvider,一个程序能够通过实现一个ContentProvider的抽象接口将自己的数据全然暴露出去,并且ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,仅仅只是是採用URI来表示外界须要訪问的“数据库”。外部訪问通过ContentResolver去訪问并操作这些被暴露的数据。

     

     

    8。怎样启用Service,怎样停用Service。

    Intent intent = new Intent();

    intent.setClass(this,cba.class);

    startService(intent);

    stopService(intent);

     

     

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

     2种方式

    1.    在androidmainfest.xml中注冊  

    2.    <receiver>

    3.        <intent-filter>

    4.           <action android:name = "android.intent.action.PICK"/>

    5.        </intent-filter>

    6.    </receiver>

    7.    缺点:常驻型,占资源比較大

    8.   

    9.    registerReceiver(receiver,filter);  BroadcastReceiver更新UI一般用这样的方法

     

     

    10. 请解释下在单线程模型中Message,Handler,Message Queue,Looper之间的关系。

     Message

       Message消息,理解为线程间交流的信息,处理数据后台线程须要更新UI,则发送Message内含一些数据给UI线程。

    2. Handler

       Handler处理者,是Message的主要处理者,负责Message的发送,Message内容的运行处理。后台线程就是通过传进来的 Handler对象引用来sendMessage(Message)。而使用Handler,须要implement 该类的 handleMessage(Message)

    方法,它是处理这些Message的操作内容,比如Update UI。通常须要子类化Handler来实现handleMessage方法。

    Message Queue

       Message Queue消息队列,用来存放通过Handler公布的消息,依照先进先出运行。

        每一个message queue都会有一个相应的Handler。Handler会向message queue通过两种方法发送消息:sendMessage或post。这两种消息都会插在message queue队尾并按先进先出运行。但通过这两种方法发送的消息运行的方式略有不同:通过sendMessage发送的是一个message对象,会被 Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会自己运行。

    4. Looper

       Looper是每条线程里的MessageQueue的管家。Android没有Global的Message Queue,而Android会自己主动替主线程(UI线程)建立Message Queue,但在子线程里并没有建立Message Queue。所以调用Looper.getMainLooper()得到的主线程的Looper不为NULL,但调用Looper.myLooper() 得到当前线程的Looper就有可能为NULL。

        对于子线程使用Looper,API Doc提供了正确的用法:

     

    11. AIDL的全程是什么?怎样工作?能处理哪些类型的数据?

    AIDL的英文全称是Android Interface Define Language

    当A进程要去调用B进程中的service时,并实现通信,我们通常都是通过AIDL来操作的

    Aproject:

    首先我们在net.blogjava.mobile.aidlservice包中创建一个RemoteService.aidl文件,在里面我们自己定义一个接口,含有方法get。ADT插件会在gen文件夹下自己主动生成一个RemoteService.java文件,该类中含有一个名为RemoteService.stub的内部类,该内部类中含有aidl文件接口的get方法。

    说明一:aidl文件的位置不固定,能够随意

    然后定义自己的MyService类,在MyService类中自己定义一个内部类去继承RemoteService.stub这个内部类,实现get方法。在onBind方法中返回这个内部类的对象,系统会自己主动将这个对象封装成IBinder对象,传递给他的调用者。

    其次须要在AndroidManifest.xml文件里配置MyService类,代码例如以下:

    <!-- 注冊服务 --> 

    <serviceandroid:name=".MyService">

     <intent-filter>

      <!--  指定调用AIDL服务的ID  -->

          <actionandroid:name="net.blogjava.mobile.aidlservice.RemoteService" />

       </intent-filter>

    </service>

    为什么要指定调用AIDL服务的ID,就是要告诉外界MyService这个类可以被别的进程訪问,仅仅要别的进程知道这个ID,正是有了这个ID,Bproject才干找到Aproject实现通信。

    说明:AIDL并不须要权限

    Bproject:

         首先我们要将Aproject中生成的RemoteService.java文件复制到Bproject中,在bindService方法中绑定aidl服务

         绑定AIDL服务就是将RemoteService的ID作为intent的action參数。

         说明:假设我们单独将RemoteService.aidl文件放在一个包里,那个在我们将gen文件夹下的该包复制到Bproject中。假设我们将RemoteService.aidl文件和我们的其它类存放在一起,那么我们在Bproject中就要建立对应的包,以保证RmoteService.java文件的报名正确,我们不能改动RemoteService.java文件

              bindService(newInten("net.blogjava.mobile.aidlservice.RemoteService"),serviceConnection, Context.BIND_AUTO_CREATE);

          ServiceConnection的onServiceConnected(ComponentName name, IBinder service)方法中的service參数就是Aproject中MyService类中继承了RemoteService.stub类的内部类的对象。

     

     Android採用RPC的方式来实现(remoteprocedure call)远程通信,而且Android通过接口定义语言AIDL来生成两个进程之间互相訪问的代码。比如,你在Activity里的代码须要訪问Service中的一个方法,那么就能够通过这样的方法来实现了。

    ?      创建一个AIDL文件(參见代码)

    ?      实现AIDL文件生成的Java接口(參见代码)

    ?      将你的接口暴露给client

    ?      client调用

     

     

    12. 请解释下Android程序执行时权限与文件系统权限的差别。

     Android程序执行  是虚拟机Dalvik( android授权)

      文件系统   是 linux 内核 授权

     

     

    13. 系统上安装了多种浏览器,是否能指定某浏览器訪问指定页面?

     webkit

     

     

    14. 有一个一维整型数组int[] data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片全部的白色不透明(0xffffffff)像素点的透明度调整为50%。

     

     

    15. 你怎样评价Android系统?优缺点。

    长处:开源特性,得到众多厂商支持。

    软件发展非常快。

    界面UI,系统优化不错。

    缺点:版本号过多,升级过快。

    用户体验不一致。

     

     

    16. android中的动画有哪几类,他们的特点和差别是什么?

    两种,

    一种是Tween动画(补间动画),

    一种是Frame动画(逐帧动画)。

    Tween动画:使试图组件移动,放大,缩小以及产生透明度的变化。

    Frame动画:传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

     

     

    17. 横竖屏切换时activity的生命周期

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

    设置Activity的android:configChanges="orientation"时,切横,竖屏时生命周期仅仅会运行一次。

    设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会又一次调用声明周期,仅仅会运行onConfigurationChanged方法。

     

    进程与线程

    当一个程序開始执行时,它就是一个进程,进程包括执行中的程序和程序所使用的内存和系统资源。而一个进程又是由多个线程组成的。引入线程长处是易于调度,提供开发效率,通过线程能够方便有效的实现并发,进程可创建多个线程来执行同一个程序的不同部分,开销小,创建线程比创建进程要快,所需开销非常少。

     

    宏就是把一系列经常使用的操作作为一个总体,保存起来,以后用的时候直接通过一定方式用就是了

    先说宏和函数的差别:

    1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其它类型參数的替换),而函数的參数的传递,參数是有数据类型的,能够是各种各样的类型.

    2. 宏的參数替换是不经计算而直接处理的,而函数调用是将实參的值传递给形參,既然说是值,自然是计算得来的.

    3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在运行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是运行时的时间.

    4. 宏的參数是不占内存空间的,由于仅仅是做字符串的替换,而函数调用时的參数传递则是详细变量之间的信息传递,形參作为函数的局部变量,显然是占用内存的.

    5. 函数的调用是须要付出一定的时空开销的,由于系统在调用函数时,要保留现场,然后转入被调用函数去运行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.

    定义一个宏替代两个输入数的乘积

    怎么写?

    #include<stdio.h>

    #define MULTIPLY(x,y) ((x)*(y))

    int main()

    {

     intx,y,z;

     scanf("%d%d",&x,&y);

     z=MULTIPLY(x,y);

     printf("%d",z);

     return 0;

    }

     

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

     

    Android 面试题经典

    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,160个字节。

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

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

      7、handler机制的原理

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

      1)Looper: 一个线程能够产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

      2)Handler: 你能够构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。

      3) MessageQueue(消息队列):用来存放线程放入的消息。

      4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

      8、说说mvc模式的原理,它在android中的运用

    android的官方建议应用程序的开发採用mvc模式。何谓mvc?

     

      mvc是model,view,controller的缩写,mvc包括三个部分:

     

      l模型(model)对象:是应用程序的主体部分,全部的业务逻辑都应该写在该层。

     

      l视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一能够看到的一层,接收用户的输入,显示处理结果。

     

      l控制器(control)对象:是依据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,想用用户出发的相关事件,交给m哦得了处理。

     

      android鼓舞弱耦合和组件的重用,在android中mvc的详细体现例如以下:

     

      1)视图层(view):一般採用xml文件进行界面的描写叙述,使用的时候能够很方便的引入,当然,怎样你对android了解的比較的多了话,就一定能够想到在android中也能够使用javascript+html等的方式作为view层,当然这里须要进行java和javascript之间的通信,幸运的是,android提供了它们之间很方便的通信实现。

     

      2)控制层(controller):android的控制层的重任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理,这样做的另外一个原因是android中的acitivity的响应时间是5s,假设耗时的操作放在这里,程序就非常easy被回收掉。

     

      3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

      9、Activity的生命周期

      和其它手机 平台的应用 程序 一样,Android的应用程序 的生命周期是被统一掌控 的,也

      就是说我们写的应用程序命运掌握在别人(系统)的手里,我们不能改变它,仅仅能学习 并

      适应它。

      简单地说一下为什么是这样:我们手机在执行 一个应用程序的时候,有可能打进来电话

      发进来短信 ,或者没有电了,这时候程序都会被中断,优先去服务电话的基本功能,另

      外系统也不同意你占用太多资源 ,至少要保证电话功能吧,所以资源不足的时候也就有可

      能被干掉。

      言归正传,Activity的基本生命周期例如以下代码 所看到的:

      Java代码

      public

      classMyActivity extends Activity {

      protected

      voidonCreate(Bundle savedInstanceState);

      protected

      voidonStart();

      protected

      voidonResume();

      protected

      voidonPause();

      protected

      voidonStop();

    protected

      voidonDestroy();

      }

      public classMyActivity extends Activity { protected void onCreate(BundlesavedInstanceState); 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 。

      具体介绍一下这几个方法中系统在做什么以及我们应该做什么:

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

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

      onResume: 变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个

      Activity的最上面,执行完弹出栈,则回到上一个Activity)

      onPause: 到这一步是可见但不可交互 的,系统会停止动画 等消耗CPU 的事情

      从上文的描写叙述已经知道,应该在这里保存你的一些数据,由于这个时候

      你的程序的优先级减少,有可能被系统收回。在这里保存的数据,应该在

      onResume里读出来,注意:这种方法里做的事情时间要短,由于下一

      个activity不会等到这种方法完毕才启动

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

      onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方

      法或者是系统为了节省空间将它临时性的干掉,能够用isFinishing()来判

      断它,假设你有一个ProgressDialog在线程中转动,请在onDestroy里

      把他cancel掉,不然等线程结束的时候,调用Dialog的cancel方法会抛

      异常的。

      onPause,onstop, onDestroy,三种状态 下 activity都有可能被系统干掉

    为了保证程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的内容都保存到存储介质上(一般都是数据库 )。实际工作中由于生命周期的变化而带来的问题也非常多,比方你的应用程序起了新的线程在跑,这时候中断了,你还要去维护那个线程,是暂停还是杀掉还是数据回滚,是吧?由于Activity可能被杀掉,所以线程中使用的变量和一些界面元素就千万要注意了,一般都是採用Android的消息机制 [Handler,Message]来处理多线程和界面交互的问题。

      10、让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”

      就变成半透明的,[友情提示-.-]类似的这样的activity的属性能够在android.R.styleable 类的AndroidManifestActivity 方法中看到,AndroidManifest.xml中全部元素的属性的介绍都能够參考这个类android.R.styleable

      上面说的是属性名称,详细有什么值是在android.R.style中能够看到,比方这个”@android:style/Theme.Dialog”就相应于android.R.style.Theme_Dialog ,(‘_’换成’.’ < --注意:这个是文章内容不是笑脸)就能够用在描写叙述文件 中了,找找类定义和描写叙述文件里的相应关系就都明确了。

      11、 你后台的Activity被系统回收怎么办:onSaveInstanceState

    当你的程序中某一个ActivityA 在执行时中,主动或被动地执行还有一个新的Activity B

      这个时候A会运行

      Java代码

      public

      voidonSaveInstanceState(Bundle outState) {

      super.onSaveInstanceState(outState);

      outState.putLong("id",1234567890);

      }

      B 完毕以后又会来找A, 这个时候就有两种情况,一种是A被回收,一种是没有被回收,被回

      收的A就要又一次调用onCreate()方法,不同于直接启动的是这回onCreate()里是带上參数

      savedInstanceState,没被收回的就还是onResume就好了。

      savedInstanceState是一个Bundle对象,你基本上能够把他理解为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,假设正常启动onCreate就不会有它,所以用的时候要推断一下是否为空。

      Java代码

      if(savedInstanceState!= null){

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

      }

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

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

      要说Intent了,Intent就是这个这个意图 ,应用程序间Intent进行交流,打个电话啦,来个

      电话啦都会发Intent,这个是Android架构的松耦合的精髓部分,大大提高了组件的复用性,比方你要在你的应用程序中点击button,给某人打电话,非常easy啊,看下代码先:

      Java代码

      Intentintent = new Intent();

      intent.setAction(Intent.ACTION_CALL);

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

      startActivity(intent);

      扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统仅仅须要扔出intent就好了,这个部分设计地确实非常好啊。

      那Intent通过什么来告诉系统须要谁来接受他呢?

      通常使用Intent有两种方法,第一种是直接说明须要哪一个类来接收代码例如以下:

      Java代码

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

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

      tartActivity(intent);

      第一种方式非常明显,直接指定了MyActivity为接受者,而且传了一些数据给MyActivity,在MyActivity里能够用getIntent()来的到这个intent和数据。

      另外一种就须要先看一下AndroidMenifest中的intentfilter的配置了

      Xml代码

      <intent-filter>

      < action

      android:name="android.intent.action.VIEW"

      />

      < action

      android:value="android.intent.action.EDIT"

      />

      < action

      android:value="android.intent.action.PICK"

      />

      <category

      android:name="android.intent.category.DEFAULT"

      />

      < data

      android:mimeType="vnd.android.cursor.dir/vnd.google.note"

      />

      </intent-filter>

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

      action事实上就是一个意图的字符串名称。

      上面这段intent-filter的配置文件说明了这个Activity能够接受不同的Action,当然对应的程序逻辑也不一样咯,提一下那个 mimeType,他是在ContentProvider里定义的,你要是自己实现一个ContentProvider就知道了,必须指定 mimeType才干让数据被别人使用。

      不知道原理说明确没,总结一句,就是你调用别的界面不是直接new那个界面,而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊,并且符合了生命周期被系统管理的原则。

      想知道category都有啥,Android为你预先定制好的action都有啥等等,请亲自訪问官方链接Intent

      ps:想知道怎么调用系统应用程序的同学,能够细致看一下你的logcat,每次执行一个程序的时候是不是有一些信息比方:

      Startingactivity: Intent { action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }

      再对比一下Intent的一些set方法,就知道怎么调用咯,希望你喜欢:)

      13. 怎样退出Activity?怎样安全退出已调用多个Activity的Application?

    对于单一Activity的应用来说,退出非常easy,直接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就可以。

     

    3、发送特定广播:

    在须要结束应用时,发送一个特定的广播,每一个Activity收到广播后,关闭就可以。

     

    4、递归退出

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

     

    除了第一个,都是想办法把每个Activity都结束掉,间接达到目的。

    可是这样做相同不完美。

    你会发现,假设自己的应用程序对每个Activity都设置了nosensor,在两个Activity结束的间隙,sensor可能有效了。

    但至少,我们的目的达到了,并且没有影响用户使用。

     

    为了编程方便,最好定义一个Activity基类,处理这些共通问题。

    摘自:http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

      14. 请介绍下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 内的元素一层覆盖一层地显示,在帧布局中,先加入的图片会被后加入的图片覆盖。

    摘自:http://javalover00000.javaeye.com/blog/851266

      15. 请介绍下Android的数据存储方式。

    Android提供了5种方式存储数据:

    1、使用SharedPreferences存储数据;

    2、文件存储数据;

    3、SQLite数据库存储数据;

    4、使用ContentProvider存储数据;

    5、网络存储数据;

    Android 中的数据存储都是私有的,其它应用程序都是无法訪问的,除非通过ContentResolver获取其它程序共享的数据。

    摘自:http://www.moandroid.com/?p=319

      16. 请介绍下ContentProvider是怎样实现数据共享的。

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

     

    怎样通过一套标准及统一的接口获取其它应用程序暴露的数据?Android提供了ContentResolver,外界的程序能够通过ContentResolver接口訪问ContentProvider提供的数据。

    參考:http://www.moandroid.com/?p=319

      17. 怎样启用Service,怎样停用Service。

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

     

    2.另外一种方式是通过调用Context.bindService()启动,调用Context.unbindservice()结束,还能够通过ServiceConnection訪问Service。

    在Service每一次的开启关闭过程中,仅仅有onStart可被多次调用(通过多次startService调用),其它onCreate,onBind,onUnbind,onDestory在一个生命周期中仅仅能被调用一次。

    參考:http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html

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

    android中,不同进程之间传递信息要用到广播,能够有两种方式来实现。

    第一种方式:在Manifest.xml中注冊广播,是一种比較推荐的方法,由于它不须要手动注销广播(假设广播未注销,程序退出时可能会出错)。

    详细实如今Manifest的application中加入:

     

    <receiverandroid:name=".mEvtReceiver">

       <intent-filter>

       <action android:name="android.intent.action.BOOT_COMPLETED"/>

       </intent-filter>

    </receiver>

     

    上面两个android:name各自是广播名和广播的动作(这里的动作是表示系统启动完毕),假设要自己发送一个广播,在代码中为:

    Intent i = newIntent(“android.intent.action.BOOT_COMPLETED”);

    sendBroadcast(i);

    这样,广播就发出去了,然后是接收。

    接收能够新建一个类,继承至BroadcastReceiver,也能够建一个BroadcastReceiver的实例,然后得写onReceive方法,实现例如以下:

    protected BroadcastReceiver mEvtReceiver =new BroadcastReceiver() {

    @Override

    public void onReceive(Context context,Intent intent) {

    String action = intent.getAction();

    if(action.equals(“android.intent.action.BOOT_COMPLETED”)) {

    //Do something

    }

    }

    };

     

    另外一种方式,直接在代码中实现,但须要手动注冊注销,实现例如以下:

    IntentFilter filter = new IntentFilter();

    filter.addAction(“android.intent.action.BOOT_COMPLETED”);

    registerReceiver(mEvtReceiver, filter); //这时注冊了一个recevier ,名为mEvtReceiver,然后相同用上面的方法以重写onReceiver,

    最后在程序的onDestroy中要注销广播,实现例如以下:

    @Override

    public void onDestroy() {

    super.onDestroy();

    unregisterReceiver(mPlayerEvtReceiver);

    }

    Android系统中的广播是广泛用于应用程序之间通信的一种手段,它类似于事件处理机制,不同的地方就是广播的处理是系统级别的事件处理过程(一般事件处理是控件级别的)。在此过程中仍然是离不开Intent对象,理解广播事件的处理过程,灵活运用广播处理机制,在关键之处往往能实现特别的效果,

    在Android 中假设要发送一个广播必须使用sendBroadCast 向系统发送对其感兴趣的广播接收器中。

    使用广播必需要有一个intent对象必设置其action动作对象

    使用广播必须在配置文件里显式的指明该广播对象

    每次接收广播都会又一次生成一个接收广播的对象

    在BroadCast 中尽量不要处理太多逻辑问题,建议复杂的逻辑交给Activity 或者 Service 去处理

    转自:http://www.dengdeng.name/u/deng/archives/2010/92.html

     

    http://www.cnblogs.com/TerryBlog/archive/2010/08/16/1801016.html

     

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

    简单的说,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler进行Message的分发和处理

    參见:http://hi.baidu.com/???????/blog/item/4e576b7c58d742360cd7dac9.html

     

    http://blog.csdn.net/xuxinyl/archive/2010/12/25/6097560.aspx

     

      20. AIDL的全称是什么?怎样工作?能处理哪些类型的数据?

    AIDL全称Android Interface Definition Language(AndRoid接口描写叙述语言)是一种借口描写叙述语言; 编译器能够通过aidl文件生成一段代码,通过预先定义的接口达到两个进程内部通信进程跨界对象訪问的目的.AIDL的IPC的机制和COM或CORBA类似, 是基于接口的,但它是轻量级的。它使用代理类在client和实现层间传递值. 假设要使用AIDL, 须要完毕2件事情: 1. 引入AIDL的相关类.; 2. 调用aidl产生的class.理论上, 參数能够传递基本数据类型和String, 还有就是Bundle的派生类, 只是在Eclipse中,眼下的ADT不支持Bundle做为參数,

    详细实现过程例如以下:

     

    1、创建AIDL文件, 在这个文件中面定义接口, 该接口定义了可供client訪问的方法和属性。

     

    2、编译AIDL文件, 用Ant的话, 可能须要手动, 使用Eclipse plugin的话,能够依据adil文件自己主动生产java文件并编译, 不须要人为介入.

     

    3、在Java文件里, 实现AIDL中定义的接口. 编译器会依据AIDL接口, 产生一个JAVA接口。这个接口有一个名为Stub的内部抽象类,它继承扩展了接口并实现了远程调用须要的几个方法。接下来就须要自己去实现自己定义的几个接口了.

    4、向client提供接口ITaskBinder, 假设写的是service,扩展该Service并重载onBind ()方法来返回一个实现上述接口的类的实例。

    5、在server端回调client的函数. 前提是当client获取的IBinder接口的时候,要去注冊回调函数, 仅仅有这样, server端才知道该调用那些函数

     

    AIDL语法非常easy,能够用来声明一个带一个或多个方法的接口,也能够传递參数和返回值。因为远程调用的须要, 这些參数和返回值并非不论什么类型.以下是些AIDL支持的数据类型:

     

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

     

    2. String, CharSequence不须要特殊声明

     

    3. List, Map和Parcelables类型, 这些类型内所包括的数据成员也仅仅能是简单数据类型, String等其它比支持的类型.

     

    (另外: 我没尝试Parcelables,在Eclipse+ADT下编译只是, 也许以后会有所支持).

     

    实现接口时有几个原则:

     

    .抛出的异常不要返回给调用者. 跨进程抛异常处理是不可取的.

     

    .IPC调用是同步的。假设你知道一个IPC服务须要超过几毫秒的时间才干完毕地话,你应该避免在Activity的主线程中调用。也就是IPC调用会挂起应用程序导致界面失去响应. 这样的情况应该考虑单起一个线程来处理.

     

    .不能在AIDL接口中声明静态属性。

     

    IPC的调用步骤:

     

    1. 声明一个接口类型的变量,该接口类型在.aidl文件里定义。

     

    2. 实现ServiceConnection。

     

    3. 调用ApplicationContext.bindService(),并在ServiceConnection实现中进行传递.

     

    4. 在ServiceConnection.onServiceConnected()实现中,你会接收一个IBinder实例(被调用的Service). 调用

     

    YourInterfaceName.Stub.asInterface((IBinder)service)将參数转换为YourInterface类型。

     

    5. 调用接口中定义的方法。你总要检測到DeadObjectException异常,该异常在连接断开时被抛出。它仅仅会被远程方法抛出。

     

    6. 断开连接,调用接口实例中的ApplicationContext.unbindService()

    參考:http://buaadallas.blog.51cto.com/399160/372090

      21. 请解释下Android程序执行时权限与文件系统权限的差别。

    apk程序是执行在虚拟机上的,相应的是Android独特的权限机制,仅仅有体现到文件系统上时才使用linux的权限设置。

    android系统有的权限是基于签名的。

    详细參见:http://blog.csdn.net/Zengyangtech/archive/2010/07/20/5749999.aspx

      22. 系统上安装了多种浏览器,是否能指定某浏览器訪问指定页面?请说明原由。

    通过直接发送Uri把參数带过去,或者通过manifest里的intentfilter里的data属性

      23. 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片全部的白色不透明(0xffffffff)像素点的透明度调整为50%。

      24、什么是ANR 怎样避免它?

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

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

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

      Android应用程序全然执行在一个独立的线程中(比如main)。这就意味着,不论什么在主线程中执行的,须要消耗大量时间的操作都会引发ANR。由于此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

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

      25、什么情况会导致Force Close ?怎样避免?是否能捕获导致其的异常?

      答:一般像空指针啊,能够看起logcat,然后相应到程序中 来解决错误

      26、Android本身的api并未声明会抛出异常,则其在执行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?怎样解决?

      27、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver

      答:一个activity呈现了一个用户能够操作的可视化用户界面

      一个service不包括可见的用户界面,而是在后台无限地执行

      能够连接到一个正在执行的服务中,连接后,能够通过服务中暴露出来的借口与其进行通信

      一个broadcastreceiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面

      intent:contentprovider在接收到ContentResolver的请求时被激活。

      activity,service和broadcastreceiver是被称为intents的异步消息激活的。

    一个intent是一个Intent对象,它保存了消息的内容。对于activity和service来说,它指定了请求的操作名称和待操作数据的URI

      Intent对象能够显式的指定一个目标component。假设这种话,android会找到这个component(基于 manifest文件里的声明)并激活它。但假设一个目标不是显式指定的,android必须找到响应intent的最佳component。

      它是通过将Intent对象和目标的intent filter相比較来完毕这一工作的。一个component的intent filter告诉android该component能处理的intent。intent filter也是在manifest文件里声明的。

      28、IntentService有何长处?

      答:IntentService的优点

      * Acitivity的进程,当处理Intent的时候,会产生一个相应的Service

      * Android的进程处理器如今会尽可能的不kill掉你

      * 很easy使用

      29、横竖屏切换时候activity的生命周期?

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

      2、设置Activity的android:configChanges=”orientation”时,切屏还是会又一次调用各个生命周期,切横、竖屏时仅仅会运行一次

      3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会又一次调用各个生命周期,仅仅会运行onConfigurationChanged方法

      30. 怎样将SQLite数据库(dictionary.db文件)与apk文件一起公布?

      解答:能够将dictionary.db文件拷贝到Eclipse Androidproject中的res aw文件夹中。全部在res aw文件夹中的文件不会被压缩,这样能够直接提取该文件夹中的文件。能够将dictionary.db文件拷贝到res aw文件夹中

      31. 怎样将打开res aw文件夹中的数据库文件?

      解答:在Android中不能直接打开res aw文件夹中的数据库文件,而须要在程序第一次启动时将该文件拷贝到手机内存或SD卡的某个文件夹中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res aw文件夹中资源的 InputStream对象,然后将该InputStream对象中的数据写入其它的文件夹中对应文件里。在Android SDK中能够使用SQLiteDatabase.openOrCreateDatabase方法来打开随意文件夹中的SQLite数据库文件。

      32. Android引入广播机制的用意?

      答:a:从MVC的角度考虑(应用程序内)

     事实上回答这个问题的时候还能够这样问,android为什么要有那4大组件,如今的移动开发模型基本上也是照搬的web那一套MVC架构,仅仅只是是改了点嫁妆而已。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制能够方便几大组件的信息和数据交互。

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

      c:效率上(參考UDP的广播协议在局域网的方便性)

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

    转自:http://www.cnmsdn.com/html/201101/1295431222ID9251.html

    33、android 的优势与不足

    Android平台手机 5大优势:

    一、开放性

    在优势方面,Android平台首先就是其开发性,开发的平台同意不论什么移动终端厂商增加到Android联盟中来。显著的开放性能够使其拥有很多其它的开发人员,随着用户和应用的日益丰富,一个崭新的平台也将非常快走向成熟

    开发性对于Android的发展而言,有利于积累人气,这里的人气包含消费者和厂商,而对于消费者来讲,随大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将能够用更低的价位购得心仪的手机。

    二、挣脱运营商的束缚

     

    在过去非常长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,差点儿都受到运营商的控制。从去年iPhone 上市,用户能够更加方便地连接网络,运营商的制约降低。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机任意接入网络已不是运营商口中的笑谈,当你能够通过手机IM软件方便地进行即时聊天时,再回忆不久前天价的彩信和图铃下载业务,是不是像噩梦一样?

    互联网巨头Google推动的Android终端天生就有网络特色,将让用户离互联网更近。

    三、丰富的硬件选择

    这一点还是与Android平台的开放性相关,因为Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,好比你从诺基亚 Symbian风格手机 一下改用苹果 iPhone ,同一时候还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是能够方便地转移,是不是很方便呢?

    四、不受不论什么限制的开发商

    Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如可控制正是留给Android难题之中的一个。

    五、无缝结合的Google应用

    现在叱诧互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。

    再说Android的5大不足:

    一、安全和隐私

    因为手机与互联网的紧密联系,个人隐私非常难得到保守。除了上网过程中经意或不经意留下的个人足迹,Google这个巨人也时时站在你的身后,洞穿一切,因此,互联网的深入将会带来新一轮的隐私危机。

    二、首先开卖Android手机的不是最大运营商

    众所周知,T-Mobile在23日,于美国纽约公布了Android首款手机G1。可是在北美市场,最大的两家运营商乃AT&T和Verizon,而眼下所知取得Android手机销售权的仅有 T-Mobile和Sprint,当中T-Mobile的3G网络相对于其它三家也要逊色不少,因此,用户能够买账购买G1,是否能体验到最佳的3G网络服务则要另当别论了!

    三、运营商仍然可以影响到Android手机

    在国内市场,不少用户对购得移动定制机不满,感觉所购的手机被人涂画了广告一般。这种情况在国外市场相同出现。Android手机的还有一发售运营商Sprint就将在其机型中内置其手机商店程序。

    四、同类机型用户降低

    在不少手机论坛都会有针对某一型号的子论坛,对一款手机的使用心得交流,并分享软件资源。而对于Android平台手机,因为厂商丰富,产品类型多样,这样使用同一款机型的用户越来越少,缺少统一机型的程序强化。举个稍显不当的样例,如今山寨机泛滥,品种各异,就非常少有专门针对某个型号山寨机的讨论和群组,除了哪些功能异常抢眼、颇受追捧的机型以外。

    五、过分依赖开发商缺少标准配置

    在 使用PC端的Windows Xp系统的时候,都会内置微软Windows Media Player这样一个浏览器程序,用户能够选择很多其它样的播放器,如Realplay或暴风影音等。但入手開始使用默认的程序相同能够应付多样的须要。在Android平台中,因为其开放性,软件很多其它依赖第三方厂商,比方Android系统的SDK中就没有内置音乐播放器,所有依赖第三方开发,缺少了产品的统一性。

    34、android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和差别。

    XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要採用SAX方式,SAX读取是单向的,长处:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是非常方便。而DOM方式会把整个XML文件载入到内存中去,这里Android开发网提醒大家该方法在查找方面能够和XPath非常好的结合假设数据量不是非常大推荐使用,而PULL经常常使用在J2ME对于节点处理比較好,类似SAX方式,相同非常节省内存,在J2ME中我们经常使用的KXML库来解析。

    具体情况请參考http://blog.csdn.net/Android_Tutor/archive/2010/09/17/5890835.aspx

     

    http://www.linuxidc.com/Linux/2010-11/29768.htm

     

    http://littlefermat.blog.163.com/blog/static/59771167200981853037951/

     

    35、DDMS和TraceView的差别?

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

    36、Activity被回收了怎么办?

    仅仅有另启用了

    37、java中怎样引用本地语言

    能够用JNI接口

    38、谈谈Android的IPC机制

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

    39、NDK是什么

    NDK是一些列工具的集合,

    NDK提供了一系列的工具,帮助开发人员迅速的开发C/C++的动态库,并能自己主动将so和java 应用打成apk包。

    NDK集成了交叉编译器,并提供了对应的mk文件和隔离cpu、平台等的差异,开发者仅仅需简单的改动mk文件就能够创建出so

    40 描写叙述一下android的系统架构

    android系统架构分从下往上为linux 内核层、执行库、应用程序框架层、和应用程序层

    linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

     

      libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源码的函数库,比如webkit,该函数库负责 android网页浏览器的执行,比如标准的c函数库libc、openssl、sqlite等,当然也包含支持游戏开发2dsgl和 3dopengles,在多媒体方面有mediaframework框架来支持各种影音和图形文件的播放与显示,比如mpeg4、h.264、mp3、 aac、amr、jpg和png等众多的多媒体文件格式。android的runtime负责解释和执行生成的dalvik格式的字节码。

     

      applicationframework(应用软件架构),java应用程序开发者主要是使用该层封装好的api进行高速开发。

     

      applications:该层是java的应用程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp3播放器等处于该层,java开发者开发的程序也处于该层,并且和内置的应用程序具有平等的位置,能够调用内置的应用程序,也能够替换内置的应用程序。

     

      上面的四个层次,下层为上层服务,上层须要下层的支持,调用下层的服务,这样的严格分层的方式带来的极大的稳定性、灵活性和可扩展性,使得不同层的开发者能够依照规范专心特定层的开发。

     

      android应用程序使用框架的api并在框架下执行,这就带来了程序开发的高度一致性,还有一方面也告诉我们,要想写出优质高效的程序就必须对整个 applicationframework进行很深入的理解。精通applicationframework,你就行真正的理解android的设计和执行机制,也就更可以驾驭整个应用层的开发。

     

     

     

     

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

     

     

    一些常见的Android面试基础题做下总结,看看你能做出多少道?

     

     

     

    1. Intent的几种有关Activity启动的方式有哪些,你了解每一个含义吗?

     

     

     

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

     

     

        这里Android123提示大家,Intent的一些标记有FLAG_ACTIVITY_BROUGHT_TO_FRONT、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和FLAG_ACTIVITY_NEW_TASK 等。每种含义大家看SDK文档和详细跑下这样你的记忆会更深刻些。

     

      2.Activity和Task的启动模式有哪些? 每种含义是什么?

     

     

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

     

       有关在AndroidManifest.xml中的android:launchMode定义,主要有standard、singleTop、singleTask和singleInstance,同一时候对于android:taskAffinity这些问题大家也要了解,Android开发网在曾经的文章中讲过,只是非常多开发人员仍然不是非常清楚,这些基础问题我们以后仍然会再次总结。

     

       关于Activity的启动模式,參考:http://blog.csdn.net/feng88724/archive/2011/05/11/6412638.aspx

     

      3. 通过Intent传递一些二进制数据的方法有哪些?

     

     

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

     

      1). 使用Serializable接口实现序列化,这是Java经常使用的方法。

     

      2). 实现Parcelable接口,这里Android的部分类比方Bitmap类就已经实现了,同一时候Parcelable在Android AIDL中交换数据也非经常见的。

     

      4. 能说下Android应用的入口点吗?

     

     

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

     

      真正的Android入口点是application的main,你能够看下androidmanifest.xml的包括关系就清楚了。 能够没有Activity可是必须有Application

     

    5. Android都有哪些XML解析器,都熟练掌握吗?

     

     

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

     

      这里XmlPull、SAX和DOM相信做过Web开发的都已经滚瓜烂熟了。

     

      6.SQLite支持事务吗? 加入删除怎样提高性能?

     

     

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

     

     SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能能够考虑通过原始经过优化的SQL查询语句方式处理。

     

      7.Android Service和Binder、AIDL你都熟练吗?

     

     

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

     

      作为Android重要的后台服务,这些每一个Android开发人员都应该掌握,这也算是和Java SE最大的不同了,详细的实例大家能够查看Android音乐播放器的源码Music.git中的,这里不再赘述。

     

    8. 你用过哪款Android手机,有哪些长处和不足,相对于iPhone或Symbian又有哪些优缺点?

     

     

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

     

       把这个作为面试题也是考察下,能够大概了解到它对Android的了解程度,多移动开发的认识。

     

    【2011-5-12 补充】

     

     

     

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

     

     

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

     

     

     

     

    创建 oncreate-  启动onstart – 恢复 onResume – 暂停 onPause – 结束 onEnd – 销毁onDestroy

     

     

     

     

    2.   假设后台的Activity因为某原因被系统回收了,怎样在被系统回收之前保存当前状态?

     

     

     

     

    在”暂停 onPause” 状态将数据保存。

     

     

     

    3.   怎样将一个Activity设置成窗体的样式。

     

     

     

     

    设置Theme。

     

     

     

     

    4.   怎样退出Activity?怎样安全退出已调用多个Activity的Application?

     

     

     

     

    5.   请介绍下Android中经常使用的五种布局。

     

     

     

     

    线性布局LinearLayout, 相对布局 RelativeLayout

     

     

    表单布局TableLayout,

    绝对布局AbsLayout(已淘汰)

     

     

    帧布局FrameLayout

     

     

     

     

    6.   请介绍下Android的数据存储方式。

     

     

     

     

    Preference,文件,数据库SQlite,网络存储

     

     

     

     

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

     

     

     

     

     

    8.   怎样启用Service,怎样停用Service。

     

     

     

     

    启动:

    Context.startService()

    and

    Context.bindService().

     

     

    关闭:Context.stopService().

     

              Service.stopSelf()

    or

    Service.stopSelfResult()

     

     

     

     

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

     

     

     

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

     

     

     

    11.   AIDL的全称是什么?怎样工作?能处理哪些类型的数据?

     

     

     

    12.   请解释下Android程序执行时权限与文件系统权限的差别。(Edited by Sodino)

     

     

     

    13.   系统上安装了多种浏览器,是否能指定某浏览器訪问指定页面?请说明原由。

     

     

     

    14.   有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片全部的白色不透明(0xffffffff)像素点的透明度调整为50%。

     

     

     

    15.   你怎样评价Android系统?优缺点。 (这一题反复了)

     

     

     

     

    优势:

    一、开放性 三、丰富的硬件选择五、无缝结合的Google应用支持

     

    缺点:  一、安全和隐私

    二,开发商自己定义,不够统一 四、同类机型用户降低

     

    【2011-5-12 补充】

     

     

     

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

     

     

    1、什么是ANR 怎样避免它?

     

     

     

    http://blog.csdn.net/Zengyangtech/archive/2010/11/21/6025671.aspx

     

     

     

    2、什么情况会导致Force Close ?怎样避免?是否能捕获导致其的异常?

     

     

     

     

    3、Android本身的api并未声明会抛出异常,则其在执行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?怎样解决?

     

     

     

     

    会有执行时异常, 执行时异常无需捕捉

     

    4、简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver

     

     

     

          这个问题问的非常普遍,自己多看看吧。在此不多说了!

     

     

    5、IntentService有何长处?

     

     

     

    【2011-5-12 补充】

     

     

     

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

     

     

    1. android:paddingLeft与android:layout_marginLeft的差别

     

    当button分别设置以上两个属性时,得到的效果是不一样的。

    android:paddingLeft="30px"

    button上设置的内容(比如图片)离button左边边界30个像素

    android:layout_marginLeft="30px"

    整个button离左边设置的内容30个像素

     

     

     

     

    2. Android 动画有哪几种?描写叙述一下

     

     

    两种。 Tween动画和Frame动画。 Tween动画主要是透明度、尺寸伸缩、旋转、位移等效果。

     

     

     

    Frame动画能够理解成gif, 一帧一帧的显示图片。比較经常使用的有滚动栏效果。

     

     

     

     

    3. 对Intent、Activity、广播、Service等的理解。

     

     

     

    4. 哪些情况下会发生ANR ? 怎么相应 ? (这个问题也反复了)

     

      Application Not Response。

     

     

     

     

    5. 隐式、显式Intent的差别

     

    ·   显式意图

     

    通过名字指明目标组件(这个组件名字字段component name field,

    前面提到过,

    有一个数值集)。既然组件名称通常不为其它应用程序的开发人员所了解,显式意图典型的被用作应用程序的内部消息-比如一个活动启动一个附属服务或姊妹活动。

     

     

       隐式意图

     

    不命名目标组件(组件名称字段为空)。隐式意图经经常使用来激活其它应用程序的组件。

     

        这一块參考Intent说明,能够同一时候看一下Notepad的样例, 帮助理解,个人感觉非常重要!

     

    (上面几个问题感觉都不错,各位自己查漏补缺吧!有些还没有写答案的, 各位有空能够回答一下~ 我会将你的答案填充上去)

     

     

     

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

     

    2011-07-05 补充

     

     

     

    返回键与Home键差别?

     

     

     

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

     

     

    1、Android操作系统是Google在什么时间发布的

    A、2007年11月5日   B、2010年5月20日晚10点30分   C、2009年11月10日

    正确答案:A

    2、Android基于什么平台的开源智能手机操作系统名称

    A、WinCE    B、Linux   C、SHP  

    正确答案:B

    3、Linux平台由下面下哪些组成?

    A、操作系统  B、中间件   C、用户界面   D、应用软件

    正确答案:ABCD

    4、Android操作系统基本的特点是:(         )

    A、与Google无缝结合        B、实现个性化应用   

    C、良好的平台开放性         D、软件均要收费

    正确答案:ABC

    5、Android操作系统向开发者提供是

    A、所有免费    B、部分收费     C、仅仅有10%左右是收费的

    正确答案:A

    6、Android个性化界面设置的加入方式

    A、点选屏幕下方加入键进行加入   B、长按屏幕空白处进行加入  C、直接拖拽至屏幕进行加入

    正确答案:ABC

    7、个性化界面设置不同内容包含:

    A、快捷方式   B、小插件   C、窗体小部件      D、目录

    正确答案:ABCD

    8、Android操作系统採用全新解锁方式描写叙述正确的是:(    )

    A、自己定义图型解锁; B、滑动解锁; C、规定图型解锁; D、仅仅可側键解锁;

    正确答案:AB

    9、Android支持谷歌全方位移动服务,丰富最新网络体验包含:

    A、电子市场;    B、GoogleTalk;    C、Google搜索;  

    D、G-mail邮箱;  E、Google地图

    正确答案:ABCDE

    10、截止2010年12月,中国上市的Andriod操作系统已经公布了下面哪几个版本号

    A、1.0      B、1.3     C、1.5      D、1.6      E 、2.0   F、2.1   G、2.2

    正确答案:ACDEFG

    11、在中国,下面哪些属于Android软件主要下载门户?(       )

    A、安卓网    B、机锋网     C、百度      D、Google    E、优亿市场

    正确答案:ABE

    12、Android安装软件后缀是:(       )

    A..sis         B.cab          C..apk         D..jar

    正确答案:C

    13、下面哪些不是Android操作系统的版本号:(      )

    A、1.0     B、1.3     C、 2.0      D、2.1      E 、2.2

    正确答案:B

    14、Android操作平台的开放性也针对了众多手机品版的厂家进行了全然的开放,下面有哪几个品牌的手机从未使用过Android操作系统:(       )

    A.HTC     B.I phone       C.samsung         D.诺基亚        E.黑莓

    正确答案:BDE

    15、Android1.5操作系统叫(         )

    A.纸杯蛋糕    B.甜甜圈     C.法式奶油夹心甜点    D.果馅饼    E.冻酸奶

    正确答案:A

    16、Android1.6操作系统叫(         )

    A.纸杯蛋糕    B.甜甜圈     C.法式奶油夹心甜点    D.果馅饼    E.冻酸奶

    正确答案:B

    17、Android2.0操作系统叫(         )

    A.纸杯蛋糕    B.甜甜圈     C.法式奶油夹心甜点    D.果馅饼    E.冻酸奶

    正确答案:C

    18、Android2.1操作系统叫(         )

    A.纸杯蛋糕    B.甜甜圈     C.法式奶油夹心甜点    D.果馅饼    E.冻酸奶

    正确答案:D

    19、Android2.2操作系统叫(         )

    A.纸杯蛋糕    B.甜甜圈     C.法式奶油夹心甜点    D.果馅饼    E.冻酸奶

    正确答案:E

    20、Android2.2操作系统与Android2.1操作系统对照有哪些方面的提升(         )

    A.总体性能大幅度的提升    B.3G网络共享功能     C.全面的Flash支持

    D.App 2 sd功能(安装程序到SD卡)     E.全新的软件商店

    F.更好的网络体验

    正确答案:ABCDEF

    21、Android系统能够同一时候执行多个程序吗?(         )

    A.能够; B.不能够

    正确答案:A

    22、下面对Android操作系统描写叙述正确的是:(        )

    A.系统资源占用少,系统执行速度快

    B.全然开放性的操作系统,对全部软件开发商、手机厂商、运营商平等享有

    C.有众多的软件提供给消费者下载

    D.个性化的操作界面,操作简单

    正确答案:ABCD

    23、Android操作系统的手机能够有下面几个方法进行软件安装(       )

    A.通过手机直接登陆百度站点下载安装;

    B.通过手机直接登陆Android门户站点进行下载安装;

    C.通过数据线与电脑连接直接下载安装;

    D.通过PC终端上网下载至SD卡里再插入手机进行安装;

    正确答案:ABCD

    24、Android操作系统具有个性化操作界面设置,下面关于进行加入描写叙述正确的是(       )

    A.点选屏幕下方加入键进行加入      B.长按屏幕空白处进行加入

    C.直接拖拽至屏幕进行加入          D.不可直接拖拽至屏幕进行加入

    正确答案:ABC

    26、Android从哪个版本号開始支持动态壁纸(       )

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:D

    27、Android从哪个版本号開始支持3D动态相冊(       )

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:D

    28、Android从哪个版本号開始系统自带支持mobileAP热点(        )

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:E

    29、Android从哪个版本号開始支持Flash10.1(       )

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:E

     

    30、Android从哪个版本号開始系统自带支持AllShare协议(        )

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:E

    31、Android从哪个版本号開始能够提供多个不同账户统一收件箱

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:C

    32、Android从哪个版本号開始浏览器支持双击缩放

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:C

    33、Android从哪个版本号開始强化了语音识别的搜索功能

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:C

    34、Android从哪个版本号開始增加微软Exchange服务支持

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:C

    35、Android从哪个版本号開始支持双击上传图片至YouTube

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:C

    36、Android从哪个版本号開始支持谷歌地图服务更新

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:C

    37、Android从哪个版本号開始支持全部文本输入区应用语音识别

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:D

    38、Android从哪个版本号開始支持3D相片集

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:D

    39、Android从哪个版本号開始支持修复FM收音机

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:D

    40、下面哪些是Android的优势(       )

    A、开源的操作系统,代码全然开放,开放成本最低

    B、 便捷的用户体验界面,操作简单

    C、 平台技术先进,更好的支持互联网业务

    D、系统资源占用少,系统速度快

    正确答案:ABCD

    41、Android从哪个版本号開始软件可安装到存储卡上

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:E

    42、Android从哪个版本号開始自己主动更新设备上已经安装的应用程序

    A.1.0      B.1.3     C. 2.0      D.2.1      E .2.2

    正确答案:E

     

    43、Android能实现手机的主屏幕的自己定义,并将经常使用的各种应用以图标的形式加入至主屏幕界面

    A、对

    B、错

    正确答案:A

    44、Android能实现手机的主屏幕的自己定义,可是加入的图标要依照功能属性排列

    A、对

    B、错

    正确答案:B

    45、Android操作系统的主屏界面图标设置一次后,就不能更改

    A、对

    B、错

    正确答案:B

     

    46、、Android操作系统能够将哪些类型不同内容,任意加入至主屏幕

    A、快捷键

    B、窗体小部件

    C、目录

    D、壁纸

    正确答案:ABCD

  • 相关阅读:
    路径规划 Adjacency matrix 传球问题
    Graph
    n的阶乘的n次方根的倒数的序列为无穷小序列
    原文来自 url get
    对称加密 非对称加密 生活模型
    签名 sign key 纸质邮件 历史 RSA诞生历史
    离散数学图论
    内联函数
    由适当地放宽不等式 概括出 一个引理
    序列 有界 无界的证明
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4185491.html
Copyright © 2011-2022 走看看