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、管理一个e人e本,这一个华为平板就是一块优异的内存,能直接排版到android的视图
    view上。
B、管理一个EGL display,它能让opengl把内容渲染到上述的平板电脑上。
C、让渲染器在单独的线程里运行,和UI线程分离。
D、可以直接从内存仍然DMA等硬件接口取得图像数据
16. 
   下边在AndroidManifest.xml文件中注册布罗德castReceiver模式正确的(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),咋样停用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.bind瑟维斯(Service)()方法启动服务。这五个方法都可
以启动Service,可是它们的施用场地有所不同。
1.施用start瑟维斯(Service)()方法启用服务,调用者与劳务中间没有牵涉,尽管调用者退出了,服务仍旧运行。
利用bind瑟维斯(Service)()方法启用服务,调用者与劳动绑定在了一起,调用者一旦退出,服务也就为止。
2.施用Context.start瑟维斯(Service)(Service)()方法启动服务,在劳务未被创建时,系统会先调用服务的onCreate()方法,
随后调用onStart()方法。倘使调用start瑟维斯()方法前服务已经被创设,多次调用start瑟维斯(Service)()方法并
不会造成多次成立服务,但会导致多次调用onStart()方法。
利用startService(Service)()方法启动的服务,只可以调用Context.stop瑟维斯(Service)(Service)()方法截止劳动,服务截至时会调用
766游戏网官网,onDestroy()方法。

3.应用Context.bind瑟维斯(Service)()方法启动服务,在劳务未被成立时,系统会先调用服务的onCreate()方法,
紧接着调用onBind()方法。那一个时候调用者和劳动绑定在同步,调用者退出了,系统就会先调用服务的onUnbind()方法,
。接着调用onDestroy()方法。即使调用bind瑟维斯(Service)(Service)()方法前服务一度被绑定,多次调用bindService()方法并不会
造成多次创立服务及绑定(也就是说onCreate()和onBind()方法并不会被频繁调用)。倘使调用者希望与正在绑定的劳务
撤废绑定,可以调用unbind瑟维斯(Service)()方法,调用该措施也会导致系统调用服务的onUnbind()–>onDestroy()方法。
三。Service的生命周期
1.瑟维斯(Service)常用生命周期回调方法如下:

onCreate() 该办法在服务被制造时调用,该措施只会被调用两回,无论调用多少次startService(Service)()或bindService(Service)()方法,
劳务也只被创建一遍。 onDestroy()该措施在劳动被截止时调用。

  1. Context.start瑟维斯(Service)()启动瑟维斯(Service)(Service)有关的生命周期方法
    onStart() 只有拔取Context.start瑟维斯(Service)()方法启动服务时才会回调该方法。该方法在劳动开首运行时被调用。
    往往调用start瑟维斯(Service)()方法就算不会一再创制服务,但onStart()方法会被频繁调用。

3.
Context.bindService(Service)()启动Service有关的生命周期方法
onBind()只有应用Context.bindService(Service)()方法启动服务时才会回调该措施。该措施在调用者与劳务绑定时被调用,
当调用者与服务一度绑定,多次调用Context.bind瑟维斯(Service)()方法并不会促成该情势被一再调用。
onUnbind()唯有利用Context.bind瑟维斯(Service)(Service)()方法启动服务时才会回调该格局。该情势在调用者与劳务解除绑定时被调用。
备注:
1. 接纳start瑟维斯(Service)()启动服务
     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(Service)(conn);//解除绑定
46.   
注册广播有三种艺术,那个方法有何优缺点?请谈谈Android引入广播机制的意向。
  Android广播机制(三种注册格局)
在android下,要想接受广播消息,那么这多少个广播接收器就得咱们团结来兑现了,我们可以连续布罗德(Broad)castReceiver,就足以有一个播放接受器了。有个接受器还不够,大家还得重写布罗德castReceiver里面的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类,在My瑟维斯(Service)(Service)类中自定义一个里边类去继续Remote瑟维斯(Service)(Service).stub这么些里面类,实现get方法。在onBind方法中回到那么些里面类的靶子,系统会自动将那么些目的封装成IBinder对象,传递给她的调用者。
说不上需要在AndroidManifest.xml文件中布置My瑟维斯(Service)类,代码如下:
<!– 注册服务 –>  
<service
android:name=”.MyService”> 
  <intent-filter> 
   <!–  指定调用AIDL服务的ID  –>
      
<actionandroid:name=”net.blogjava.mobile.aidlservice.RemoteService”
/>
   </intent-filter> 
</service>
缘何要指定调用AIDL服务的ID,就是要告诉外界My瑟维斯(Service)那多少个类能够被另外进程访问,只要其余进程知道这一个ID,正是有了那些ID,B工程才能找到A工程落实通信。
表达:AIDL并不需要权限
B工程:
      首先我们要将A工程中生成的RemoteService(Service).java文件拷贝到B工程中,在bind瑟维斯(Service)(Service)方法中绑定aidl服务
      绑定AIDL服务就是将RemoteService的ID作为intent的action参数。
      表明:假诺我们单独将RemoteService.aidl文件放在一个包里,这个在大家将gen目录下的该包拷贝到B工程中。即使我们将RemoteService.aidl文件和大家的此外类存放在一块儿,那么我们在B工程中即将建立相应的包,以保险RmoteService.java文件的报名正确,我们不可以修改Remote瑟维斯(Service).java文件
         
bindService(newInten(“net.blogjava.mobile.aidlservice.RemoteService”),serviceConnection,
Context.BIND_AUTO_CREATE);
      瑟维斯(Service)(Service)Connection的onServiceConnected(ComponentName name,
IBinderservice)方法中的service参数就是A工程中MyService类中连续了Remote瑟维斯(Service).stub类的内部类的靶子。
49.   
请解释下Android程序运行时权限与文件系统权限的区别。
运转时权限Dalvik(
android授权) 
文件系统 linux 内核授权

50. 
   系统上设置了多种浏览器,能否指定某浏览器访问指定页面?请证实原因。
因此一向发送Uri把参数带过去,或者通过manifest里的intentfilter里的data属性

51.    你怎样评价Android系统?优缺点。答:Android平台手机
5大优势: 
一、开放性 
在优势方面,Android平台首先就是其开发性,开发的阳台允许任何活动终端厂商投入到Android联盟中来。显明的开放性可以使其颇具更多的开发者,随着用户和行使的逐渐增长,一个全新的阳台也将很快走向成熟。开放性对于Android的前进而言,有利于积累人气,这里的人气席卷消费者和厂商,而对此消费者来讲,随大的获益正是丰裕的软件资源。开放的阳台也会带动更大竞争,如此一来,消费者将得以用更低的价位购得心仪的手机。
二、挣脱运营商的束缚 
在过去很长的一段时间,特别是在欧美地区,手机接纳往往面临运营商制约,使用什么功用衔接什么网络,几乎都饱受运营商的决定。从上年金立上市
,用户可以更进一步惠及地连续网络,运营商的制约缩小。随着EDGE、HSDPA这一个2G至3G运动网络的日渐对接和升级,手机随意接入网络已不是运营商口中的笑谈,当您可以由此手机IM软件方便地举办即时聊天时,再回首不久明日价的彩信和图铃下载业务,是不是像噩梦一样?互联网巨头谷歌推动的Android终端天生就有网络特色,将让用户离互联网更近。
三、丰硕的硬件采纳 
这或多或少要么与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,效能特色各具的多种产品。功用上的出入和特性,却不会影响到多少同步、甚至软件的匹配,好比你从黑莓Symbian风格手机 一下改用苹果 One plus,同时还可将Symbian中有口皆碑的软件带到一加上行使、联系人等材料更加可以方便地转换,是不是丰硕有利啊?
四、不受任何限制的开发商 
Android平台提供给第三方开发商一个非常广阔、自由的环境,不会遭逢各样条条框框的阻扰,不问可知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的先后和游戏如可控制正是留给Android难题之一。
五、无缝结合的谷歌应用 
方今叱诧互联网的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平夏洛蒂(Charlotte),由于其开放性,软件更多依赖第三方厂商,比如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、布罗德(Broad)case、布罗德(Broad)caseReceiver

  答:一个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应用程序总是由这两个部分组成。伊夫nt(事件)导致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(Service)之间可以随时的展开互相,故在Android中该机制,只适用于Activity和瑟维斯(Service)(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

发表评论

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