android 面试题收集

Android基础部分

1.请列出Android的四大组件。

解答:ActivityServiceBroadcast ReceiverContent Provider

2.请问Activity一般会重载哪7个方法用来维护其生命周期。

解答:    onCreate(),onStart()/onRestart(),onResume(),onPause(),onStop(),onDestory()

3.请问一条最长的短信息约占多少byte?

解答:中文70(包括标点),英文160160个字节。

4.请说明android中的动画有哪几类,它们的特点和区别是什么?

解答:

(1)Frame Animation(帧动画)
传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。主要用于播放一帧帧准备好的图片,类似GIF图片,优点是使用简单方便、缺点是需要事先准备好每一帧图片
(2)Tween Animation(补间动画)
这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化,仅需定义开始与结束的关键帧,而变化的中间帧由系统补上,优点是不用准备每一帧,缺点是只改变了对象绘制,而没有改变View本身属性。因此如果改变了按钮的位置,还是需要点击原来按钮所在位置才有效。
(3)Property Animation(属性动画)是3.0后推出的动画,优点是使用简单、降低实现的复杂度、直接更改对象的属性、几乎可适用于任何对象而仅非View类

5.请简单说明在UI布局中,Android的控件属性padding和margin有什么区别?

解答:

通俗的理解
Padding 为内边框,指该控件内部内容,如文本/图片距离该控件的边距
Margin 为外边框,指该控件距离边父控件的边距

6.请简述Android的数据存储方式有哪几种。

解答:

(1)SharedPreferences方式

(2)文件存储方式

(3)SQLite数据库方式

(4)Content  provider

(5)网络存储方式

7.请写出Button点击事件的代码。

解答:

        button.setOnClickListener(newandroid.view.View.OnClickListener(){

            @Override

            public voidonClick(View arg0) {

                // TODOAuto-generated method stub

                ……

            }

        });

8.请说明在单线程模型中,Message、Handler、Message Queue、Looper之间的关系。

解答:

1.Handler简介:

handler是android给我们提供用来更新UI的一套机制,也是消息处理的机制,我们可以发送消息,也可以通过它处理消息。

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

Handler有两个主要的用途:

1)确定在将来的某个时间点执行一个或者一些MessageRunnable对象。

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对象包含一些信息,HandlerhanlerMessage(Message)会处理这些Message.当然,handlerMessage(Message)必须由Handler的子类来重写。这是编程人员需要作的事。
posting或者sending到一个Hanler时,你可以有三种行为:当MessageQueue准备好就处理,定义一个延迟时间,定义一个精确的时间去处理。后两者允许你实现timeout,tick,和基于时间的行为。
当你的应用创建一个新的进程时,主线程(也就是UI线程)自带一个MessageQueue,这个MessageQueue管理顶层的应用对象(像activities,broadcastreceivers等)和主线程创建的窗体。你可以创建自己的线程,并通过一个Handler和主线程进行通信。这和之前一样,通过postsendmessage来完成,差别在于在哪一个线程中执行这么方法。在恰当的时候,给定的RunnableMessage将在HandlerMessageQueue中被Scheduled

消息的处理者。通过Handler对象我们可以封装Message对象,然后通过sendMessage(msg)Message对象添加到 MessageQueue中;当MessageQueue循环到该Message时,就会调用该Message对象对应的handler对象的 handleMessage()方法对其进行处理。由于是在handleMessage()方法中处理消息,因此我们应该编写一个类继承自 Handler,然后在handleMessage()处理我们需要的操作。

2.Message简介:

Message类就是定义了一个消息,这个消息中包含一个描述符和任意的数据对象,这个信息被用来传递给Handler.这个类有几个比较重要的字段:

1arg1arg2:我们可以使用两个字段用来存放我们需要传递的整型值,在Service中,我们可以用来存放ServiceID

2obj:该字段是Object类型,我们可以让该字段传递某个多项到消息的接受者中。

3what:这个字段是消息的标志,在消息处理中,可以根据这个字段的不同值进行不同的处理,类似于我们在处理Button事件时,通过switch(v.getId())判断是点击了哪个按钮。

     在使用Message时,我们可以通过new Message()创建一个Message实例,但是Android更推荐我们通过Message.obtain()或者 Handler.obtainMessage()获取Message对象。这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的Message实例,存在则直接取出并返回这个实例。反之如果消息池中没有可用的Message实例,则根据给定的参数new一个新Message对象。 Android系统默认情况下在消息池中实例化10Message对象。

3.MessageQueue简介:

消息队列,这是一个包含Message列表的底层类,用来存放Message对象的数据结构,它将Message对象以链表的方式串联起来。Looper负责分发这些messageMessages并不是直接加到一个MessageQueue中,而是通过MessageQueue.IdleHandler关联到LooperMessageQueue对象不需要我们自己创建,而是有Looper对象对其进行管理,一个线程最多只可以拥有一个MessageQueue。我们可以通过Looper.myQueue()获取当前线程中的MessageQueue

4.Looper简介:

MessageQueue的管理者,Looper类被用来执行一个线程中的Message循环。在一个线程中,如果存在Looper对象,则必定存在MessageQueue对象,并且只存在一个Looper对象和一个MessageQueue对象。倘若我们的线程中存在Looper对象,则我们可以通过Looper.myLooper()获取,此外我们还可以通Looper.getMainLooper()获取当前应用系统中主线程的Looper对象。假如Looper对象位于应用程序主线程中,则Looper.myLooper()Looper.getMainLooper()获取的是同一个对象。

下面是一个典型的带有Looper的线程实现。
  class LooperThread extends Thread {
      public Handler mHandler;
      public void run() {
          Looper.prepare();
          mHandler = new Handler() {
              public voidhandleMessage(Message msg) {
                  // process incomingmessages here
              }
          };
          Looper.loop();
      }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值