70道面试题766游戏网官网

正文转自:http://tech.it168.com/a2012/0201/1305/000001305470_2.shtml

IT168技术】本文为开发者进献了70道经典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.activity

  5.
对一些资源以及气象的操作保存,最好是保存在生命周期的哪些函数中举行(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、 <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、管理一个三星平板,这一个GALAXY Tab就是一块优良的内存,能直接排版到android的视图

  view上。

  B、管理一个EGL display,它能让opengl把内容渲染到上述的平板电脑上。

  C、让渲染器在单身的线程里运行,和UI线程分离。

  D、可以直接从内存如故DMA等硬件接口取得图像数据

  16. 下边在AndroidManifest.xml文件中注册布罗德(Broad)castReceiver形式正确的

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 开发的最先

  二.文件存储格局

  三.SQLite数据库情势

  四.内容提供器(Content provider)情势

  二、Android面试填空题

25.
android中常用的三个布局是framlayout,linenarlayout,relativelayout和tablelayout。

  1. android 的四大组件是activiey,service,broadcast和contentprovide。

27.
java.io包中的objectinputstream和objectoutputstream类重要用于对目标(Object)的读写。

  1. 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.____________________________________。

  1. 程序运行的结果是:_____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办法

  五. 网络存储形式

  44.
请介绍下ContentProvider是如何促成数量共享的。创建一个属于您自己的Content
provider或者将你的数据增长到一个早已存在的Contentprovider中,前提是有雷同数据类型并且有写入Content
provider的权限。

  45.
怎么启用瑟维斯(Service),怎么着停用Service(Service)。Android中的service类似于windows中的service,service一般没有用户操作界面,它运行于系统中不易于被用户发现,

  可以利用它支付如监控之类的次序。

  一。步骤

  第一步:继承Service类

  public class SMSService extends Service { }

  第二步:在AndroidManifest.xml文件中的节点里对劳动举行配置:

  二。Context.startService()和Context.bindService

  服务不可能友好运行,需要经过调用Context.start瑟维斯(Service)()或Context.bindService(Service)()方法启动服务。这多少个办法都可

  以启动瑟维斯,不过它们的施用场地有所不同。

  1.采用startService()方法启用服务,调用者与劳务期间没有牵涉,固然调用者退出了,服务如故运行。

  使用bindService()方法启用服务,调用者与服务绑定在了协同,调用者一旦退出,服务也就终止。

  2.采用Context.startService()方法启动服务,在劳务未被创设时,系统会先调用服务的onCreate()方法,

  接着调用onStart()方法。假如调用startService(Service)()方法前服务业已被成立,多次调用start瑟维斯(Service)(Service)()方法并

  不会导致多次创办服务,但会招致多次调用onStart()方法。

  接纳start瑟维斯(Service)()方法启动的服务,只能调用Context.stop瑟维斯(Service)()方法截止劳动,服务截止时会调用

  onDestroy()方法。

  3.运用Context.bindService()方法启动服务,在劳动未被创制时,系统会先调用服务的onCreate()方法,

  接着调用onBind()方法。这么些时候调用者和服务绑定在联名,调用者退出了,系统就会先调用服务的onUnbind()方法,

  。接着调用onDestroy()方法。如若调用bind瑟维斯(Service)()方法前服务已经被绑定,多次调用bind瑟维斯(Service)()方法并不会

  导致多次创办服务及绑定(也就是说onCreate()和onBind()方法并不会被频繁调用)。若是调用者希望与正在绑定的劳动

  解除绑定,可以调用unbindService(Service)()方法,调用该情势也会导致系统调用服务的onUnbind()–>onDestroy()方法。

  三。Service(Service)的生命周期

  1.Service(Service)常用生命周期回调方法如下:

  onCreate()该措施在服务被创制时调用,该格局只会被调用五回,无论调用多少次start瑟维斯(Service)(Service)()或bindService()方法,

  服务也只被创建五回。 onDestroy()该方法在服务被截至时调用。

  2. Context.start瑟维斯(Service)(Service)()启动瑟维斯(Service)(Service)有关的生命周期方法

  onStart()只有应用Context.startService(Service)()方法启动服务时才会回调该措施。该模式在劳务先河运行时被调用。

  多次调用start瑟维斯(Service)()方法即使不会反复创办服务,但onStart()方法会被频繁调用。

  3. Context.bind瑟维斯(Service)()启动瑟维斯有关的生命周期方法

  onBind()惟有使用Context.bindService(Service)()方法启动服务时才会回调该办法。该措施在调用者与服务绑定时被调用,

  当调用者与劳动业已绑定,多次调用Context.bindService()方法并不会促成该措施被反复调用。

  onUnbind()只有应用Context.bindService(Service)()方法启动服务时才会回调该措施。该措施在调用者与服务解除绑定时被调用。

  备注:

  1. 采用start瑟维斯(Service)(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(conn);//解除绑定

  46.
注册广播有二种艺术,这个办法有何优缺点?请谈谈Android引入广播机制的意向。
Android广播机制(两种注册格局)

  在android下,要想接受广播音讯,那么那多少个广播接收器就得我们和好来落实了,我们可以继承布罗德(Broad)castReceiver,就足以有一个播放接受器了。有个接受器还不够,我们还得重写布罗德(Broad)castReceiver里面的onReceiver方法,当来播放的时候我们要怎么,这就要我们团结一心来贯彻,可是大家可以搞一个消息防火墙。具体的代码:

  public class SmsBroadCastReceiverextends BroadcastReceiver

  {

766游戏网官网,  @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

  {

  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中安排广播

  package=”spl.broadCastReceiver”

  android:versionCode=”1″

  android:versionName=”1.0″>

  android:label=”@string/app_name”>

  二种注册类其余界别是:

  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(Service).aidl文件,在内部大家自定义一个接口,含有方法get。ADT插件会在gen目录下自动生成一个RemoteService(Service).java文件,该类中含有一个名为Remote瑟维斯(Service)(Service).stub的里边类,该内部类中含有aidl文件接口的get方法。

  表达一:aidl文件的职位不固定,可以肆意

  然后定义自己的MyService类,在MyService(Service)类中自定义一个中间类去继承RemoteService.stub这么些里面类,实现get方法。在onBind方法中回到这一个里面类的对象,系统会活动将这些目的封装成IBinder对象,传递给他的调用者。

  其次需要在AndroidManifest.xml文件中布局My瑟维斯(Service)(Service)类,代码如下:

  为啥要指定调用AIDL服务的ID,就是要告诉外界My瑟维斯(Service)这多少个类可以被另外进程访问,只要此外进程知道这多少个ID,正是有了这些ID,B工程才能找到A工程落实通信。

  表明:AIDL并不需要权限

  B工程:

  首先大家要将A工程中变化的RemoteService.java文件拷贝到B工程中,在bindService方法中绑定aidl服务

  绑定AIDL服务就是将Remote瑟维斯(Service)(Service)的ID作为intent的action参数。

  表明:假诺我们单独将Remote瑟维斯(Service).aidl文件放在一个包里,这个在我们将gen目录下的该包拷贝到B工程中。即使我们将Remote瑟维斯(Service).aidl文件和我们的另外类存放在一块儿,那么大家在B工程中即将建立相应的包,以确保Rmote瑟维斯.java文件的报名正确,大家不能够修改Remote瑟维斯(Service).java文件

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

  ServiceConnection的on瑟维斯(Service)Connected(ComponentName name,
IBinderservice)方法中的service参数就是A工程中My瑟维斯(Service)类中连续了Remote瑟维斯(Service)(Service).stub类的中间类的对象。

  49.
请解释下Android程序运行时权限与文件系统权限的区别。运行时权限Dalvik(
android授权)

  文件系统 linux 内核授权

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

  51.
你什么评价Android系统?优缺点。答:Android平台手机
5大优势:

  一、开放性

  在优势方面,Android平台首先就是其开发性,开发的阳台允许其他活动终端厂商投入到Android联盟中来。显然的开放性可以使其具备更多的开发者,随着用户和应用的逐渐丰富,一个簇新的阳台也将急迅走向成熟。开放性对于Android的前进而言,有利于积累人气,这里的人气席卷消费者和厂商,而对于顾客来讲,随大的收益正是丰裕的软件资源。开放的阳台也会带动更大竞争,如此一来,消费者将得以用更低的价位购得心仪的手机

  二、挣脱运营商的约束

  在过去很长的一段时间,特别是在欧美地区,手机应用往往遭逢运营商制约,使用什么效劳衔接什么网络,几乎都遭受运营商的操纵。从上年One plus上市
,用户可以进一步有利地连接网络,运营商的牵制缩小。随着EDGE、HSDPA这一个2G至3G运动网络的渐渐对接和升级,手机随意接入网络已不是运营商口中的笑谈,当您可以通过手机IM软件方便地举办即时聊天时,再回首不久前几天价的彩信和图铃下载业务,是不是像噩梦一样?互联网巨头Google推动的Android终端天生就有网络特征,将让用户离互联网更近。

  三、丰盛的硬件采取

  这一点要么与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,效用特色各具的多种产品。效率上的出入和特色,却不会潜移默化到多少同步、甚至软件的匹配,好比你从One plusSymbian风格手机 一下改用苹果 小米,同时还可将Symbian中有口皆碑的软件带到Samsung上行使、联系人等材料更加可以方便地转移,是不是异常有利呢?

  四、不受任何限制的开发商

  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、布罗德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.  Intent瑟维斯(Service)(Service)有何优点?

  答:IntentService 的好处

  * Acitivity的进程,当处理Intent的时候,会发出一个应和的Service(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

发表评论

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