70道经典Android口试题加答案--首要常识点几乎都涉及到了

时间:2021-05-25 14:20:43

1.        下列哪些语句关于内存收受接管的申明是正确的? (b ) A、 法度员必须创建一个线程来开释内存
  B、 内存收受接管法度负责开释无用内存 
  C、 内存收受接管法度容许法度员直接开释内存 
  D、 内存收受接管法度可以在指定的时候开释内存对象 
2.        下面异常是属于Runtime Exception 的是(abcd)(多选)      A、ArithmeticException
      B、IllegalArgumentException 
      C、NullPointerException 
      D、BufferUnderflowException 
3.         Math.round(11.5)便是几许(). Math.round(-11.5)便是几许(c). c    A、11 ,-11   B、11 ,-12   C、12 ,-11   D、12 ,-12
4.        下列法度段的输出成果是:(b )
     void complicatedexpression_r(){
     int x=20, 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、011.activity5.        对一些资料以及状况的操纵保存,最好是保存在生命周期的哪个函数中进行(d)
   A、onPause()  B、onCreate()   C、 onResume()   D、onStart()
6.        Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)       A、Serializable  B、charsequence  C、Parcelable  D、Bundle
7.        android 中下列属于Intent的感化的是(c)  A、实现应用法度间的数据共享
  B、是一段长的生命周期,没有效户界面的法度,可以对峙应用在后台运行,而不会因为切换页面而消散
  C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
  D、处理惩罚一个应用法度整体性的工作
8.        下列属于SAX解析xml文件的长处的是(b)      A、将全部文档树在内存中,便于操纵,支撑删除,批改,从头分列等多种功能
      B、不消事先调入全部文档,占用资料少
      C、全部文档调入内存,浪费时候和空间
      D、不是长久驻留在内存,数据不是持久的,事务过后,若没有保存数据,数据就会
  消散
9.         下面的对自定style的体式格式正确的是(a)    A、 <resources>
       <style name="myStyle">
                            <itemname="android:layout_width">fill_parent</item>
                     </style>
</resources>
     B、 <style name="myStyle">
                            <itemname="android:layout_width">fill_parent</item>
   </style>
     C、 <resources>
                            <itemname="android:layout_width">fill_parent</item>
  </resources>
     D、 <resources>
                            <stylename="android:layout_width">fill_parent</style>
  </resources>
10.       在android中应用Menu时可能须要重写的办法有(ac)。(多选)      A、onCreateOptionsMenu()
  B、onCreateMenu()
  C、onOptionsItemSelected()
  D、onItemSelected()
11.      在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。 SELECT @@IDENTITY  
     A、      可能为0.1
     B、       可能为3
     C、      不成能为-100
     D、      必然为0
12.     在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 WHEREqty<40
              Update SALES Set qty=50 WHEREqty<50
              Update SALES Set qty=60 WHEREqty<60
        COMMIT TRANSACTION B
        COMMIT TRANSACTION A
A、SALES表中qty列最小值大于便是30
B、SALES表中qty列最小值大于便是40
C、SALES表中qty列的数据全部为50
D、SALES表中qty列最小值大于便是60
13.      在android中应用SQLiteOpenHelper这个帮助类时,可以生成一个数据库,并可以对数据库版本进行经管的办法可所以(ab)    A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()
14.     android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)    A、当第一次启动的时辰先后调用onCreate()和onStart()办法
    B、当第一次启动的时辰只会调用onCreate()办法
    C、若是service已经启动,将先后调用onCreate()和onStart()办法
D、若是service已经启动,只会履行onStart()办法,不在履行onCreate()办法
15.     下面是属于GLSurFaceView特点的是(abc)(多选) A、经管一个surface,这个surface就是一块特别的内存,能直接排版到android的视图
    view上。
B、经管一个EGL display,它能让opengl把内容衬着到上述的surface上。
C、让衬着器在自力的线程里运作,和UI线程分别。
D、可以直接从内存或者DMA等硬件接口取得图像数据
16.     下面在AndroidManifest.xml文件中注册BroadcastReceiver体式格式正确的(a)       A、<receiver android:name="NewBroad">
                     <intent-filter>
                            <action  
                   android:name="android.provider.action.NewBroad"/>
                <action>
                     </intent-filter>
              </receiver>
     B、<receiver android:name="NewBroad">
                     <intent-filter>
                   android:name="android.provider.action.NewBroad"/>
                     </intent-filter>
              </receiver>
     C、<receiver android:name="NewBroad">
                     <action  
                  android:name="android.provider.action.NewBroad"/>
             <action>
              </receiver>
     D、<intent-filter>
         <receiver android:name="NewBroad">
                           <action>
                   android:name="android.provider.action.NewBroad"/>
                  <action>
                     </receiver>
</intent-filter>
17.     关于ContenValues类说法正确的是(a)     A、他和Hashtable斗劲类似,也是负责存储一些名值对,然则他存储的名值对傍边的
        名是String类型,而值都是根蒂根基类型
     B、他和Hashtable斗劲类似,也是负责存储一些名值对,然则他存储的名值对傍边的
        名是随便率性类型,而值都是根蒂根基类型
     C、他和Hashtable斗劲类似,也是负责存储一些名值对,然则他存储的名值对傍边的
        名,可认为空,而值都是String类型     
     D、他和Hashtable斗劲类似,也是负责存储一些名值对,然则他存储的名值对傍边
        的名是String类型,而值也是String类型
18.     我们都知道Hanlder是线程与Activity通信的桥梁,若是线程处理惩罚不当,你的机械就会变得越慢,那么线程烧毁的办法是(a)      A、onDestroy()
      B、onClear()
      C、onFinish() 
      D、onStop()
19.     下面退出Activity错误的办法是(c)       A、finish()
         B、抛异常强迫退出
       C、System.exit()
       D、onStop()
20.     下面属于android的动画分类的有(ab)(多项)       A、Tween  B、Frame C、Draw D、Animation
21.     下面关于Android dvm的过程和Linux的过程,应用法度的过程说法正确的是(d)        A、DVM指dalivk的虚拟机.每一个Android应用法度都在它本身的过程中运行,不必然拥有一个自力的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个过程,所以说可以认为是同一个概念.
        B、DVM指dalivk的虚拟机.每一个Android应用法度都在它本身的过程中运行,不必然拥有一个自力的Dalvik虚拟机实例.而每一个DVM不必然都是在Linux中的一个过程,所以说不是一个概念.
        C、DVM指dalivk的虚拟机.每一个Android应用法度都在它本身的过程中运行,都拥有一个自力的Dalvik虚拟机实例.而每一个DVM不必然都是在Linux中的一个过程,所以说不是一个概念.
        D、DVM指dalivk的虚拟机.每一个Android应用法度都在它本身的过程中运行,都拥有一个自力的 Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个过程,所以说可以认为是同一个概念.
22.       Android项目工程下面的assets目次的感化是什么bA、放置应用到的图片资料。
B、首要放置多媒体等数据文件
C、放置字符串,色彩,数组等常量数据
D、放置一些与UI响应的布局文件,都是xml文件
23.       关于res/raw目次说法正确的是(a)A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格局

B、这里的文件是原封不动的存储到设备上会转换为二进制的格局

C、 这里的文件终极以二进制的格局存储到指定的包中

D、这里的文件终极不会以二进制的格局存储到指定的包中

24.      下列对android NDK的懂得正确的是(abcd )A、 NDK是一系列对象的凑集
B、 NDK 供给了一份稳定、功能有限的 API 头文件声明。
C、 使 &#8220;Java+C&#8221; 的开辟体式格式终于转正,成为官方支撑的开辟体式格式
D、 NDK 将是 Android 平台支撑 C 开辟的匹面

二.填空题
25.      android中常用的四个布局是framlayoutlinenarlayoutrelativelayouttablelayout26.      android 的四大组件是activieyservicebroadcastcontentprovide27.      java.io包中的objectinputstreamobjectoutputstream类首要用于对对象(Object)的读写。28.      android 中service的实现办法是startservicebindservice。29.      activity一般会重载7个办法用来保护其生命周期,除了onCreate(),onStart(),onDestory()  外还有onrestart,onresume,onpause,onstop30.      android的数据存储的体式格式sharedpreference,文件,SQlite,contentprovider,收集。31.     当启动一个Activity并且新的Activity履行完后须要返回到启动它的Activity来履行 的回调函数是startActivityResult()32.     请应用号令行的体式格式创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目次下,名字为scard.img, 并指定屏幕大小HVGA.____________________________________。33.       法度运行的成果是:_____good and gbc__________。
   public classExample{ 
  String str=new String("good"); 
  char[]ch={""a"",""b"",""c""}; 
  public static void main(String args[]){ 
    Example ex=new Example(); 
    ex.change(ex.str,ex.ch); 
    System.out.print(ex.str+" and "); 
    Sytem.out.print(ex.ch); 
  } 
  public void change(String str,char ch[]){ 
    str="test ok"; 
    ch[0]=""g""; 
  } 


34.      在android中,请简述jni的调用过程。(8分)1)安装和下载Cygwin,下载 Android NDK
  2)在ndk项目中JNI接口的设计
  3)应用C/C++实现本处所法
  4)JNI天活泼态链接库.so文件
  5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

35.     简述Android应用法度布局是哪些?(7分)Android应用法度布局是:
  Linux Kernel(Linux内核)、Libraries(体系运行库或者是c/c++核心库)、Application  
  Framework(开辟框架包)、Applications  (核心应用法度)

36.     请持续SQLiteOpenHelper实现:(10分)   1).创建一个版本为1的&#8220;diaryOpenHelper.db&#8221;的数据库,
   2).同时创建一个 &#8220;diary&#8221; 表(包含一个_id主键并自增长,topic字符型100
       长度, content字符型1000长度)
    3).在数据库版本变更时请删除diary表,并从头创建出diary表。

publicclass DBHelper  extends SQLiteOpenHelper{

       public final static String DATABASENAME ="diaryOpenHelper.db";
       public final static int DATABASEVERSION =1;

       //创建数据库
       public DBHelper(Context context,Stringname,CursorFactory factory,int version)
       {
              super(context, name, factory,version);
       }
       //创建表等机构性文件
       public void onCreate(SQLiteDatabase db)
       {
              String sql ="create tablediary"+
                                   "("+
                                   "_idinteger primary key autoincrement,"+
                                   "topicvarchar(100),"+
                                   "contentvarchar(1000)"+
                                   ")";
              db.execSQL(sql);
       }
       //若数据库版本有更新,则调用此办法
       public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)
       {
              
              String sql = " ifexists diary";
              db.execSQL(sql);
              this.onCreate(db);
       }
}

37.     页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时候完成其进度显示工作。(10分)答案
publicclass ProgressBarStu extends Activity {

       private ProgressBar progressBar = null;
       protected void onCreate(BundlesavedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.progressbar);
              //从这到下是关键
              progressBar = (ProgressBar)findViewById(R.id.progressBar);
              
              Thread thread = new Thread(newRunnable() {
                     
                     @Override
                     public void run() {
                            int progressBarMax =progressBar.getMax();
                            try {
                                   while(progressBarMax!=progressBar.getProgress())
                                   {
                                          
                                          intstepProgress = progressBarMax/10;
                                          intcurrentprogress = progressBar.getProgress();
                                          progressBar.setProgress(currentprogress+stepProgress);
                                          Thread.sleep(1000);
                                   }
                                   
                            } catch(InterruptedException e) {
                                   // TODO Auto-generatedcatch block
                                   e.printStackTrace();
                            }
                            
                     }
              });
              
              thread.start();

              //关键停止
       }
       
}
38.        请描述下Activity的生命周期。      必调用的三个办法:onCreate() --> onStart() --> onResume(),用AAA默示
(1)父Activity启动子Activity,子Actvity退出,父Activity调用次序如下
AAA --> onFreeze() --> onPause() --> onStop() --> onRestart()--> onStart(),onResume() &#8230;
(2)用户点击Home,Actvity调用次序如下
AAA --> onFreeze() --> onPause() --> onStop() -- Maybe -->onDestroy() &#8211; Maybe
(3)调用finish(), Activity调用次序如下
AAA --> onPause() --> onStop() --> onDestroy()
(4)在Activity上显示dialog,Activity调用次序如下
AAA
(5)在父Activity上显示透明的或非全屏的activity,Activity调用次序如下
AAA --> onFreeze() --> onPause()
(6)设备进入睡眠状况,Activity调用次序如下
AAA --> onFreeze() --> onPause()
39.      若是后台的Activity因为某原因被体系收受接管了,如安在被体系收受接管之前保存当前状况?      onSaveInstanceState()
      当你的法度中某一个Activity A在运行时,主动或被动地运行另一个新的Activity B,这个时辰A会履行onSaveInstanceState()。B完成今后又会来找A,这个时辰就有两种景象:一是A被收受接管,二是A没有被收受接管,被收受接管的A就要从头调用onCreate()办法,不合于直接启动的是这回onCreate()里是带上了参数savedInstanceState;而没被收回的就直接履行onResume(),跳过onCreate()了。
40.       如何将一个Activity设置成窗口的样式。      在AndroidManifest.xml 中定义Activity的处所一句话android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就变成半透明的
41.     如何退出Activity?如何安然退出已调用多个Activity的Application?对于单一Activity的应用来说,退出很简单,直接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基类,处理惩罚这些共通题目。 
42.    请介绍下Android中常用的五种布局。FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)
43.    请介绍下Android的数据存储体式格式。一.SharedPreferences体式格式
二.文件存储体式格式
三.SQLite数据库体式格式
四.内容供给器(Content provider)体式格式
五. 收集存储体式格式
44.     请介绍下ContentProvider是如何实现数据共享的。创建一个属于你本身的Content provider或者将你的数据添加到一个已经存在的Contentprovider中,前提是有雷同数据类型并且有写入Content provider的权限。
45.    如何启用Service,如何停用Service。Android中的service类似于windows中的service,service一般没有效户操纵界面,它运行于体系中不轻易被用户发觉,
可以应用它开辟如监控之类的法度。
一。步调
第一步:持续Service
public class SMSService extends Service { }
第二步:在AndroidManifest.xml文件中的<application>节点里对办事进行设备:
<service android:name=".DemoService" />
二。Context.startService()Context.bindService
办事不克不及本身运行,须要经由过程调用Context.startService()Context.bindService()办法启动办事。这两个办法都可
以启动Service,然则它们的应用处合有所不合。
1.应用startService()办法启用办事,调用者与办事之间没有干系,即使调用者退出了,办事仍然运行。
应用bindService()办法启用办事,调用者与办事绑定在了一路,调用者一旦退出,办事也就终止。
2.采取Context.startService()办法启动办事,在办事未被创建时,体系会先调用办事的onCreate()办法,
接着调用onStart()办法。若是调用startService()办法前办事已经被创建,多次调用startService()办法并
不会导致多次创建办事,但会导致多次调用onStart()办法。
采取startService()办法启动的办事,只能调用Context.stopService()办法停止办事,办事停止时会调用
onDestroy()办法。


3.采取Context.bindService()办法启动办事,在办事未被创建时,体系会先调用办事的onCreate()办法,
接着调用onBind()办法。这个时辰调用者和办事绑定在一路,调用者退出了,体系就会先调用办事的onUnbind()办法,
。接着调用onDestroy()办法。若是调用bindService()办法前办事已经被绑定,多次调用bindService()办法并不会
导致多次创建办事及绑定也就是说onCreate()onBind()办法并不会被多次调用。若是调用者欲望与正在绑定的办事
解除绑定,可以调用unbindService()办法,调用该办法也会导致体系调用办事的onUnbind()-->onDestroy()办法。
三。Service的生命周期
1.Service常用生命周期回调办法如下:

onCreate() 
该办法在办事被创建时调用,该办法只会被调用一次,无论调用几许次startService()bindService()办法,
办事也只被创建一次。 onDestroy()该办法在办事被终止时调用。


2. Context.startService()启动Service有关的生命周期办法
onStart() 只有采取Context.startService()办法启动办事时才会回调该办法。该办法在办事开端运行时被调用。
多次调用startService()办法尽管不会多次创建办事,但onStart()办法会被多次调用。

3. Context.bindService()
启动Service有关的生命周期办法
onBind()只有采取Context.bindService()办法启动办事时才会回调该办法。该办法在调用者与办事绑按时被调用,
当调用者与办事已经绑定,多次调用Context.bindService()办法并不会导致该办法被多次调用。
onUnbind()只有采取Context.bindService()办法启动办事时才会回调该办法。该办法在调用者与办事解除绑按时被调用。
备注:
1. 采取startService()启动办事
     Intent intent =new Intent(DemoActivity.this, DemoService.class);
    startService(intent);
2.Context.bindService()启动
    Intent intent =new Intent(DemoActivity.this, DemoService.class);
   bindService(intent, conn, Context.BIND_AUTO_CREATE);
   //unbindService(conn);//解除绑定
46.    注册广播有几种体式格式,这些体式格式有何优毛病?请谈谈Android引入广播机制的用意。  Android广播机制(两种注册办法)
在android下,要想接管广播信息,那么这个广播接管器就得我们本身来实现了,我们可以持续BroadcastReceiver,就可以有一个广播接管器了。有个接管器还不敷,我们还得重写BroadcastReceiver里面的onReceiver办法,当来广播的时辰我们要干什么,这就要我们本身来实现,不过我们可以搞一个信息防火墙。具体的代码:

public class SmsBroadCastReceiverextends BroadcastReceiver   
{  

   @Override  
   public void onReceive(Context context, Intent intent)   
   {   
       Bundle bundle = intent.getExtras();  
       Object[] object = (Object[])bundle.get("pdus");   
       SmsMessage sms[]=new SmsMessage[object.length];   
       for(int i=0;i<object.length;i++)  
       {   
            sms[0] =SmsMessage.createFromPdu((byte[])object);  
            Toast.makeText(context, "来自"+sms.getDisplayOriginatingAddress()+"的消息是:"+sms.getDisplayMessageBody(),Toast.LENGTH_SHORT).show();   
       }   
       //终止广播,在这里我们可以稍微处理惩罚,按照用户输入的号码可以实现短信防火墙。   
       abortBroadcast();   
   }   
      


当实现了广播接管器,还要设置广播接管器接管广播信息的类型,这里是信息:android.provider.Telephony.SMS_RECEIVED

我们就可以把广播接管器注册到体系里面,可以让体系知道我们有个广播接管器。这里有两种,一种是代码动态注册:

//生成广播处理惩罚  
smsBroadCastReceiver = newSmsBroadCastReceiver();   
//实例化过滤器并设置要过滤的广播  

IntentFilter intentFilter = newIntentFilter("android.provider.Telephony.SMS_RECEIVED");

//注册广播   
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,intentFilter);  
一种是在AndroidManifest.xml中设备广播

<?xml version="1.0"encoding="utf-8"?>  
<manifestxmlns:android="http://schemas.android.com/apk/res/android"  
     package="spl.broadCastReceiver"  
     android:versionCode="1" 
     android:versionName="1.0"> 
   <application android:icon="@drawable/icon"android:label="@string/app_name">
       <activity android:name=".BroadCastReceiverActivity"  
                  android:label="@string/app_name">  
            <intent-filter>  
                <actionandroid:name="android.intent.action.MAIN" />  
                <categoryandroid:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
       </activity>  
           
       <!--广播注册-->  
       <receiver android:name=".SmsBroadCastReceiver">  
            <intent-filterandroid:priority="20">  
                <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>  
            </intent-filter>  
       </receiver>  
           
   </application>  
      
   <uses-sdk android:minSdkVersion="7" />  
      
   <!-- 权限申请 -->  
   <uses-permissionandroid:name="android.permission.RECEIVE_SMS"></uses-permission>  
      
</manifest>   

两种注册类型的差别是:

    1)第一种不是常驻型广播,也就是说广播跟从法度的生命周期。

    2)第二种是常驻型,也就是说当应用法度封闭后,若是有信息广播来,法度也会被体系调用主动运行。
47.    请申明下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。Handler简介:

一个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,broadcast receivers等)和主线程创建的窗体。你可以创建本身的线程,并经由过程一个Handler和主线程进行通信。这和之前一样,经由过程postsendmessage来完成,差别在于在哪一个线程中履行这么办法。在恰当的时辰,给定的RunnableMessage将在HandlerMessageQueue中被Scheduled


Message
简介:
Message
类就是定义了一个信息,这个信息中包含一个描述符和随便率性的数据对象,这个信息被用来传递给Handler.Message对象供给额外的两个int域和一个Object域,这可以让你在大多半景象下不消作分派的动作。
尽管Message的机关函数是public的,然则获取Message实例的最好办法是调用Message.obtain(),或者Handler.obtainMessage()办法,这些办法会从收受接管对象池中获取一个。


MessageQueue
简介:
这是一个包含message列表的底层类。Looper负责分发这些messageMessages并不是直接加到一个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
              }
          };
          
          Looper.loop();
      }
  }


48.       AIDL的全称是什么?如何工作?能处理惩罚哪些类型的数据?AIDL的英文全称是Android Interface Define Language
A过程要去调用B过程中的service时,并实现通信,我们凡是都是经由过程AIDL来操纵的
A工程:
起首我们在net.blogjava.mobile.aidlservice包中创建一个RemoteService.aidl文件,在里面我们自定义一个接口,含有办法getADT插件会在gen目次下主动生成一个RemoteService.java文件,该类中含有一个名为RemoteService.stub的内部类,该内部类中含有aidl文件接口的get办法。
申明一:aidl文件的地位不固定,可以随便率性
然后定义本身的MyService类,在MyService类中自定义一个内部类去持续RemoteService.stub这个内部类,实现get办法。在onBind办法中返回这个内部类的对象,体系会主动将这个对象封装成IBinder对象,传递给他的调用者。
其次须要在AndroidManifest.xml文件中设备MyService类,代码如下:
<!-- 注册办事 -->  
<service android:name=".MyService"> 
  <intent-filter> 
   <!--  指定调用AIDL办事的ID  -->
       <actionandroid:name="net.blogjava.mobile.aidlservice.RemoteService" />
   </intent-filter> 
</service>
为什么要指定调用AIDL办事的ID,就是要告诉外界MyService这个类可以或许被此外过程接见,只要此外过程知道这个ID,恰是有了这个ID,B工程才干找到A工程实现通信。
申明:AIDL并不须要权限
B工程:
      起首我们要将A工程中生成的RemoteService.java文件拷贝到B工程中,在bindService办法中绑定aidl办事
      绑定AIDL办事就是将RemoteServiceID作为intentaction参数。
      申明:若是我们零丁将RemoteService.aidl文件放在一个包里,那个在我们将gen目次下的该包拷贝到B工程中。若是我们将RemoteService.aidl文件和我们的其他类存放在一路,那么我们在B工程中就要建树响应的包,以包管RmoteService.java文件的报名正确,我们不克不及批改RemoteService.java文件
          bindService(newInten("net.blogjava.mobile.aidlservice.RemoteService"),serviceConnection, Context.BIND_AUTO_CREATE);
      ServiceConnectiononServiceConnected(ComponentName name, IBinderservice)办法中的service参数就是A工程中MyService类中持续了RemoteService.stub类的内部类的对象。
49.    请申明下Android法度运行时权限与文件体系权限的差别。运行时权限Dalvik( android授权) 
文件体系 linux 内核授权

50.     体系上安装了多种浏览器,可否指定某浏览器接见指定页面?请申明原由。经由过程直接发送Uri把参数带畴昔,或者经由过程manifest里的intentfilter里的data属性

51.    你如何评价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中就没有内置音乐 播放器,全部依附第三方开辟,缺乏了产品的同一性。

52.  什么是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。这种实践须要应用到所有显示用户界面的线程,因为他们都面对着同样的超时题目。

53.     什么景象会导致Force Close ?如何避免?可否捕获导致其的异常? 
  答:一般像空指针啊,可以看起logcat,然后对应到法度中 来解决错误 

54.     Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你碰到过吗?诺有的话会导致什么题目?如何解决?
55.     扼要申明一下activity、 intent 、intent filter、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的intent filter告诉android该component能处理惩罚的intent。intent filter也是在manifest文件中声明的。
56.      IntentService有何长处? 
  答:IntentService 的益处 

  * Acitivity的过程,当处理惩罚Intent的时辰,会产生一个对应的Service 

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

  * 很是轻易应用 

57.     反正屏切换时辰activity的生命周期? 
  1、不设置Activity的android:configChanges时,切屏会从头调用各个生命周期,切横屏时会履行一次,切竖屏时会履行两次 

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

  3、设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会从头调用各个生命周期,只会履行onConfigurationChanged办法

  
如何将SQLite数据库(dictionary.db文件)与apk文件一路公布? 

  解答:可以将dictionary.db文件复制到Eclipse Android工程中的res aw目次中。所有在res aw目次中的文件不会被紧缩,如许可以直接提取该目次中的文件。可以将dictionary.db文件复制到res aw目次中

58.     如何将打开res aw目次中的数据库文件? 
  解答:在Android中不克不及直接打开res aw目次中的数据库文件,而须要在法度第一次启动时将该文件复制到手机内存或SD卡的某个目次中,然后再打开该数据库文件。复制的根蒂根基办法是应用getResources().openRawResource办法获得res aw目次中资料的 InputStream对象,然后将该InputStream对象中的数据写入其他的目次中响应文件中。在Android SDK中可以应用SQLiteDatabase.openOrCreateDatabase办法来打开随便率性目次中的SQLite数据库文件。

59.     Android引入广播机制的用意? 
  答:a:从MVC的角度推敲(应用法度内) 

 其实答复这个题目的时辰还可以如许问,android为什么要有那4大组件,如今的移动开辟模型根蒂根基上也是照搬的web那一套MVC架构,只不过是改了点嫁奁罢了。android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时辰是一种彼此依存的关系,有时辰又是一种补充关系,引入广播机制可以便利几大组件的信息和数据交互。

  b:法度间互通消息(例如在本身的应用法度内监听体系来电) 

  c:效力上(参考UDP的广播和谈在局域网的便利性) 

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


60.     Android dvm的过程和Linux的过程, 应用法度的过程是否为同一个概念 
  DVM指dalivk的虚拟机。每一个Android应用法度都在它本身的过程中运行,都拥有一个自力的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个过程,所以说可以认为是同一个概念。

61.     sim卡的EF 文件有何感化 
  sim卡的文件体系有本身规范,主如果为了和手机通信,sim本 身可以有本身的操纵体系,EF就是作存储并和手机通信用的 

62.     嵌入式操纵体系内存经管有哪几种, 各有何特点 
  页式,段式,段页,用到了MMU,虚拟空间等技巧 

63.      什么是嵌入式及时操纵体系, Android 操纵体系属于及时操纵体系吗? 
  嵌入式及时操纵体系是指当外界事务或数据产生时,可以或许接管并以足够快的速度予以处理惩罚,其处理惩罚的成果又能在规定的时候之内来把握临盆过程或对处理惩罚体系作出快速响应,并把握所有及时任务调和一致运行的嵌入式操纵体系。首要用于产业把握、 军事设备、 航空航天等范畴对体系的响应时候有尖刻的请求,这就须要应用及时体系。又可分为软及时和硬及时两种,而android是基于linux内核的,是以属于软及时。

64.     一条最长的短信息约占几许byte? 
  中文70(包含标点),英文160,160个字节。 

65.     android中的动画有哪几类,它们的特点和差别是什么? 
  两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现体式格式可以使视图组件移动、放大、缩小以及产生透明度的变更;另一种Frame动画,传统的动画办法,经由过程次序的播放分列好的图片来实现,类似电影。

66.     handler机制的道理 
  andriod供给了Handler 和 Looper 来满足线程间的通信。Handler进步前辈先出原则。Looper类用来经管特定线程内对象之间的消息互换(MessageExchange)。

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

  2)Handler: 你可以机关Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接管Looper从Message Queue取出)所送来的消息。

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

  4)线程:UIthread 凡是就是main thread,而Android启动法度时会替它建树一个MessageQueue。 
67.     说说mvc模式的道理,它在android中的应用 
 MVC(Model_view_contraller)&#8221;模型_视图_把握器&#8221;。 MVC应用法度老是由这三个项目组构成。Event(事务)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依附的View都邑主动更新。类似的,只要Contro
68.    DDMS和TraceView的差别? DDMS是一个法度履行查看器,在里面可以看见线程和客栈等信息,TraceView是法度机能解析器 。
69.    java中如何引用本地说话 可以用JNI(java nativeinterface  java 本地接口)接口。

70.    谈谈Android的IPC(过程间通信)机制 IPC是内部过程通信的简称, 是共享"定名管道"的资料。Android中的IPC机制是为了让Activity和Service之间可以随时的进行交互,故在Android中该机制,只实用于Activity和Service之间的通信,类似于长途办法调用,类似于C/S模式的接见。经由过程定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地****代理。
71.    NDK是什么NDK是一些列对象的凑集,NDK供给了一系列的对象,帮助开辟者敏捷的开辟C/C++的动态库,并能主动将so和java 应用打成apk包。
NDK集成了交叉编译器,并供给了响应的mk文件和隔离cpu、平台等的差别,开辟人员只需简单的批改mk文件就可以创建出so
url:
http://greatverve.cnblogs.com/archive/2012/01/17/android-exam.htm