android面试考题

Android面试题

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、 使 “Java+C” 的开发方式终于转正,成为合法支持之开发方式
D、 NDK 将凡 Android 平台支持 C 开发之开头

二.填空题
25.      android中常用的季独布局是framlayout,linenarlayout,relativelayout和tablelayout。26.      android 的季非常组件是activiey,service,broadcast和contentprovide。27.      java.io包中之objectinputstream和objectoutputstream类主要用于对目标(Object)的读写。28. 
    android 中service的落实方式是:startservice和bindservice。29.    
 activity一般会重载7只措施用来保障其生命周期,除了onCreate(),onStart(),onDestory()  外还有onrestart,onresume,onpause,onstop。30.    
 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底“diaryOpenHelper.db”的数据库,
   2).同时创建一个 “diary”
表(包含一个_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 = “drop table 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() …
(2)用户点击Home,Actvity调用顺序如下
AAA –> onFreeze() –> onPause() –> onStop() — Maybe
–>onDestroy() – 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()该方式在劳动被停止时调用。

  1. 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允许你发送和拍卖Message和Runable对象,这些目标与一个线程的MessageQueue相关联。每一个线程实例和一个单身的线程以及该线程的MessageQueue相关联。当您创造一个新的Handler时,它就跟创建它的线程绑定以一道了。这里,线程我们啊得理解为线程的MessageQueue。从这一点上来拘禁,Handler把Message和Runable对象传递让MessageQueue,而且在这些目标离开MessageQueue时,Handler负责执行他们。

Handler有一定量个基本点的用处:(1)确定于将来之某部时间接触实施一个或有些Message和Runnable对象。(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对象涵盖有音,Handler的hanlerMessage(Message)会处理这些Message.当然,handlerMessage(Message)必须由Handler的子类来重写。这是编程人员需要发的从。

当posting或者sending到一个Hanler时,你可以生三种表现:当MessageQueue准备好就处理,定义一个延迟时间,定义一个纯正的岁月去处理。后两者允许而兑现timeout,tick,和依据时间的一言一行。

当您的下创建一个新的长河时,主线程(也就算是UI线程)自带一个MessageQueue,这个MessageQueue管理顶层的利用对象(像activities,broadcast receivers等)和主线程创建的窗体。你可以创建和谐之线程,并通过一个Handler和主线程进行通信。这跟前同一,通过post和sendmessage来完成,差别在以哪一个线程中实施这么方法。在方便的时候,给得的Runnable和Message将以Handler的MessageQueue中吃Scheduled。

Message简介:
Message类就是概念了一个消息,这个消息被隐含一个讲述符和任意的数目对象,这个消息于用来传递给Handler.Message对象提供额外的星星单int域和一个Object域,这足以被您当大多数状态下不用作分配的动作。
尽管Message的构造函数是public的,但是得Message实例的无比好方式是调用Message.obtain(),或者Handler.obtainMessage()方法,这些方法会从回收对象池中获得一个。

MessageQueue简介:
即是一个带有message列表的底类。Looper负责分发这些message。Messages并无是直接加到一个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文件,在里面我们从定义一个接口,含有方法get。ADT插件会于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服务就是以RemoteService的ID作为intent的action参数。
      说明:如果我们单独将RemoteService.aidl文件在一个包里,那个以咱们用gen目录下的该包拷贝到B工程中。如果我们将RemoteService.aidl文件和我们的旁类存放在一起,那么我们于B工程中即将建立相应的管,以保RmoteService.java文件之提请对,我们无可知修改RemoteService.java文件
         
bindService(newInten(“net.blogjava.mobile.aidlservice.RemoteService”),serviceConnection,
Context.BIND_AUTO_CREATE);
      ServiceConnection的onServiceConnected(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)”模型_视图_控制器”。
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

源:http://greatverve.cnblogs.com/archive/2012/01/17/android-exam.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注