Android面试题

1、Android的四大组件是哪些,它们的成效?

2、请介绍下Android中常用的五种布局。

3、android中的动画有哪几类,它们的表征和区别是何许 

4、android 中有哪三种解析xml的类?官方推荐哪一类?以及它们的法则和界别。 

5、ListView的优化方案 

6、请介绍下Android的多寡存储模式。 

7、activity的起步情势有哪些?是什么意义?

8、跟activity和Task 有关的 Intent启动情势有如何?其意义?

9、请描述下Activity的生命周期。

10、activity在屏幕旋转时的生命周期

11、怎么着启用Service(Service),怎样停用Service。

12、注册广播有二种办法,这一个格局有何优缺点?请谈谈Android引入广播机制的意图。

13、请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关联。

14、简要表达一下activity、 intent 、intent filter、service、布罗德(Broad)case、布罗德(Broad)caseReceiver

15、说说mvc形式的规律,它在android中的运用,android的法定提出应用程序的开支使用mvc格局。何谓mvc?

16、什么是ANR 如何避免它?

17、什么状况会招致Force Close ?怎么样避免?能否捕获导致其的特别?

18、描述一下android的系统架构

19、请介绍下ContentProvider是怎么着兑现数据共享的。

20、Android本身的api并未讲明会抛出特别,则其在运转时有无可能抛出runtime非常,你遇到过啊?诺有的话会造成什么样问题?怎样缓解?

21、IntentService(Service)有何优点? 

22、要是后台的Activity由于某原因被系统回收了,咋样在被系统回收以前封存当前情景? 

23、咋样将一个Activity设置成窗口的样式。 

24、怎样退出Activity?咋样安全退出已调用六个Activity的Application? 

25、AIDL的齐全是何许?咋做事?能处理哪些项目标数据? 

26、请表达下Android程序运行时权限与文件系统权限的分别。 

27、系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请证实原因。 

28、android系统的优势和不足 17

29、Android dvm的历程和Linux的历程, 应用程序的历程是否为同一个概念 

30、sim卡的EF文件是怎么?有何意义 

31、嵌入式操作系统内存管理有哪两种, 各有何特点 

32、什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? 

33、一条最长的短新闻约占多少byte? 

34、有一个一维整型数组int[]data保存的是一张宽为width,高为height的图样像素值音讯。请写一个算法,将该图形所有的白色不透明(0xffffffff)像素点的透明度调整为50%。

35、咋样将SQLite数据库(dictionary.db文件)与apk文件一起公布 

36、咋样将开辟res aw目录中的数据库文件? 

37、DDMS和TraceView的区别?

38、java中怎么着引用本地语言

39、谈谈Android的IPC(进程间通信)机制 

40、NDK是什么 

 

1、 Android的四大组件是哪些,它们的法力?

答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最主旨的一种,它需要为维持各界面的情状,做过多持久化的业务,妥善保管生命周期以及部分跳转逻辑

service:后台服务于Activity,封装有一个整机的效力逻辑实现,接受上层指令,完成有关的东西,定义好内需承受的Intent提供联合和异步的接口

Content Provider:是Android提供的第三方使用数据的拜会方案,可以派生Content Provider类,对外提供数据,可以像数据库一样举行精选排序,屏蔽内部数据的贮存细节,向外提供统一的借口模型,大大简化上层应用,对数据的构成提供了更有利于的门道

布罗德(Broad)Cast Receiver:接受一种或者多种Intent作触发事件,接受有关音信,做一些简易处理,转换成一条Notification,统一了Android的事件广播模型

2、 请介绍下Android中常用的五种布局。

常用五种布局情势,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(相对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

一、FrameLayout:所有东西依次都坐落左上角,会重叠,这些布局相比简单,也只能放一点比较简单的东西。二、LinearLayout:线性布局,每一个LinearLayout里面又可分为垂直布局(android:orientation=”vertical”)和水平布局(android:orientation=”horizontal” )。当垂直布局时,每一行就只有一个元素,多少个元素依次垂直往下;水平布局时,唯有一行,每一个要素依次向右排列。三、AbsoluteLayout:相对布局用X,Y坐标来指定元素的职位,这种布局格局也比较简单,然则在屏幕旋转时,往往会出题目,而且两个要素的时候,总括相比较费心。四、RelativeLayout:相对布局可以了解为某一个因素为参照物,来恒定的布局形式。首要性能有:相对于某一个元素android:layout_below、      android:layout_toLeftOf相对于父元素的地点android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一个TableLayout里面有报表行TableRow,TableRow里面可以切实定义每一个要素。每一个布局都有投机适合的章程,这五个布局元素得以互相嵌套应用,做出赏心悦目的界面。

3、 android中的动画有哪几类,它们的性状和区别是怎么  

答:二种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现情势可以使视图组件移动、放大、裁减以及爆发透明度的变动;另一种Frame动画,传统的动画片方法,通过逐个的播音排列好的图样来实现,类似电影。

4、 android 中有哪二种解析xml的类?官方推荐哪个种类?以及它们的规律和区分。

答:XML解析重要有二种模式,SAX、DOM、PULL。常规在PC上支付我们运用Dom相对轻松些,但部分特性敏感的数据库或手机上仍旧紧要使用SAX形式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个支行来说处理不是很方便。而DOM情势会把整个XML文件加载到内存中去,这里Android开发网指示我们该情势在摸索方面可以和XPath很好的重组要是数据量不是很大引进应用,而PULL平常用在J2ME对于节点处理相比较好,类似SAX格局,同样很节省内存,在J2ME中大家经常使用的KXML库来分析。

5、 ListView的优化方案

答:1、假诺自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,倘若为null就创办contentView并回到,倘使不为null则从来运用。在这些格局中尽可能少创造view。

2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要来得的数额,可以高达图像数据异步加载的意义。

3、假设listview需要出示的item很多,就要考虑分页加载。比如一共要呈现100条或者更多的时候,大家得以设想先加载20条,等用户拉到列表底部的时候再去加载接下去的20条。

6、 请介绍下Android的数目存储形式。

答:使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;

Preference,File, DataBase这两种模式分别对应的目录是/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。

一:使用SharedPreferences存储数据

率先表明SharedPreferences存储格局,它是 Android提供的用来囤积一些简单易行布置音信的一种机制,例如:登录用户的用户名与密码。其应用了Map数据结构来囤积数据,以键值的法门存储,可以概括的读取与写入,具体实例如下:

void ReadSharedPreferences(){

String strName,strPassword;

SharedPreferences   user = getSharedPreferences(“user_info”,0);

strName = user.getString(“NAME”,””);

strPassword = user getString(“PASSWORD”,””);

}

void WriteSharedPreferences(String strName,String strPassword){

SharedPreferences   user = getSharedPreferences(“user_info”,0);

uer.edit();

user.putString(“NAME”, strName);

user.putString(“PASSWORD” ,strPassword);

user.commit();

}

数据读取与写入的方法都十分简单,只是在写入的时候有些区别:先调用edit()使其处于编辑状态,然后才能改改数据,最终采纳commit()提交修改的数目。实际上SharedPreferences是应用了XML格式将数据存储到装备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。使用SharedPreferences是有些限制的:只可以在同一个包内使用,无法在不同的包里面利用。

二:文件存储数据

文本存储模式是一种较常用的不二法门,在Android中读取/写入文件的模式,与 Java中落实I/O的次序是完全相同的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。具体实例如下:

String fn = “moandroid.log”;

FileInputStream fis = openFileInput(fn);

FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE);

三:网络存储数据

网络存储模式,需要与Android 网络数据包打交道,关于Android 网络数据包的详实表明,请阅读Android SDK引用了Java SDK的怎么着package?。

四:ContentProvider

1、ContentProvider简介

当使用持续ContentProvider类,同仁一视写该类用于提供数据和仓储数据的章程,就足以向任何应用共享其数量。即便使用其他艺术也得以对外共享数据,但数据访问格局会因数量存储的不二法门而各异,如:接纳文件情势对外共享数据,需要开展文件操作读写多少;拔取sharedpreferences共享数据,需要选拔sharedpreferences API读写多少。而接纳ContentProvider共享数据的好处是统一了数量访问模式。

2、Uri类简介

Uri代表了要操作的数据,Uri紧要包含了两部分信息:1.索要操作的ContentProvider ,2.对ContentProvider中的什么数据举办操作,一个Uri由以下几有的组成:

1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://…

2.主机名(或Authority):用于唯一标识这些ContentProvider,外部调用者可以遵照那个标识来找到它。

3.途径(path):能够用来表示大家要操作的数据,路径的构建应依照作业而定,如下:

要操作contact表中id为10的记录,可以构建这样的门道:/contact/10

要操作contact表中id为10的记录的name字段, contact/10/name

要操作contact表中的所有记录,可以构建这样的路径:/contact?

要操作的数码不必然来自数据库,也可以是文件等他存储格局,如下:

要操作xml文件中contact节点下的name节点,可以构建这样的途径:/contact/name

一经要把一个字符串转换成Uri,可以选拔Uri类中的parse()方法,如下:

Uri uri = Uri.parse(“content://com.changcheng.provider.contactprovider/contact”)

3、UriMatcher、ContentUrist和ContentResolver简介

因为Uri代表了要操作的数目,所以大家很平日索要解析Uri,并从 Uri中获取数据。Android系统提供了五个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。了然它们的接纳,会便利我们的开支工作。

UriMatcher:用于匹配Uri,它的用法如下:

 

1.首先把您需要匹配Uri路径全体给登记上,如下:

//常量UriMatcher.NO_MATCH表示不兼容任何路径的重临码(-1)。

UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

//假如match()方法匹配content://com.changcheng.sqlite.provider.contactprovider /contact路径,再次回到匹配码为1

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,假使匹配就会回去匹配码

//倘诺match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230门道,重返匹配码为2

uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#号为通配符

2.注册完需要分外的Uri后,就可以利用uriMatcher.match(uri)方法对输入的Uri举办匹配,如若匹配就回到匹配码,匹配码是调用 addURI()方法传入的第六个参数,倘使匹配 content://com.changcheng.sqlite.provider.contactprovider/contact路径,重临的匹配码为1。

ContentUris:用于获取Uri路径前面的ID部分,它有五个相比较实用的法子:

withAppendedId(uri, id)用于为路径加上ID部分

parseId(uri)方法用于从路径中收获ID部分

ContentResolver:当外部应用需要对ContentProvider中的数据开展添加、删除、修改和查询操作时,可以行使 ContentResolver 类来完成,要博取ContentResolver 对象,可以动用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。

7、 activity的启动情势有怎样?是何等意义?

答:在android里,有4种activity的起步格局,分别为: 

“standard” (默认) 

“singleTop” 

“singleTask” 

“singleInstance”

 

它们紧要有如下不同:

1. 怎样支配所属task 

“standard”和”singleTop”的activity的对象task,和选拔的Intent的发送者在同一个task内,除非intent包括参数FLAG_ACTIVITY_NEW_TASK。 

一经提供了FLAG_ACTIVITY_NEW_TASK参数,会启动到其它task里。 

“singleTask”和”singleInstance”总是把activity作为一个task的根元素,他们不会被启动到一个别样task里。

2. 是否同意两个实例 

“standard”和”singleTop”能够被实例化多次,并且设有于不同的task中,且一个task可以概括一个activity的四个实例; 

“singleTask”和”singleInstance”则限制只生成一个实例,并且是task的根元素。 singleTop要求即便创立intent的时候栈顶已经有要创建 的Activity的实例,则将intent发送给该实例,而不发送给新的实例。

3. 是不是允许其他activity存在于本task内 

“singleInstance”独占一个task,其余activity无法存在分外task里;假若它启动了一个新的activity,不管新的activity的launch mode 咋样,新的activity都将会到其它task里运行(如同加了FLAG_ACTIVITY_NEW_TASK参数)。 

而另外两种格局,则可以和此外activity共存。

4. 是否每一回都生成新实例 

“standard”对于没一个起动Intent都会变卦一个activity的新实例; 

“singleTop”的activity即使在task的栈顶的话,则不生成新的该activity的实例,直接利用栈顶的实例,否则,生成该activity的实例。 

比如说现在task栈元素为A-B-C-D(D在栈顶),这时候给D发一个起步intent,假如D是 “standard”的,则生成D的一个新实例,栈变为A-B-C-D-D。 

假如D是singleTop的话,则不会生产D的新实例,栈状态仍为A-B-C-D 

只要这时给B发Intent的话,不管B的launchmode是”standard” 如故 “singleTop” ,都会生成B的新实例,栈状态变为A-B-C-D-B。

“singleInstance”是其所在栈的唯一activity,它会每一遍都被圈定。

“singleTask”假诺在栈顶,则接受intent,否则,该intent会被放弃,但是该task仍会重返前台。

当已经存在的activity实例处理新的intent时候,会调用onNewIntent()方法 如若收到intent生成一个activity实例,那么用户可以由此back键回到上一个意况;假如是一度存在的一个activity来拍卖这些intent的话,用户不可以经过按back键重临到这往日的事态。

8、 跟activity和Task 有关的 Intent启动情势有什么样?其意义?

核心的Intent Flag有: 

FLAG_ACTIVITY_NEW_TASK 

FLAG_ACTIVITY_CLEAR_TOP 

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 

FLAG_ACTIVITY_SINGLE_TOP

FLAG_ACTIVITY_NEW_TASK 

  假使设置,那个Activity会成为历史stack中一个新Task的起来。一个Task(从起步它的Activity到下一个Task中的 Activity)定义了用户可以迁移的Activity原子组。Task可以运动到前台和后台;在某个特定Task中的所有Activity总是保持同等的次序。 

  那么些标志一般用来彰显“启动”类型的所作所为:它们提供用户一名目繁多可以独立完成的工作,与开行它们的Activity完全无关。 

  使用这么些标志,如果正在起步的Activity的Task已经在运行以来,那么,新的Activity将不会启动;代替的,当前Task会简单的移入前台。参考FLAG_ACTIVITY_MULTIPLE_TASK标志,可以禁用这一行为。 

  这多少个标志无法用于调用方对已经启动的Activity请求结果。

FLAG_ACTIVITY_CLEAR_TOP 
  如若设置,并且这多少个Activity已经在现阶段的Task中运行,因而,不再是再一次起动一个以此Activity的实例,而是在那么些Activity上方的具备Activity都将关闭,然后这多少个Intent会作为一个新的Intent投递到老的Activity(现在身处顶端)中。 
  例如,假诺一个Task中包含这多少个Activity:A,B,C,D。即便D调用了startActivity(),并且包含一个指向Activity B的Intent,那么,C和D都将截至,然后B接收到这一个Intent,因而,近来stack的情景是:A,B。 
  上例中正在运转的Activity B既可以在onNewIntent()中收取到这么些新的Intent,也得以把自己关闭然后重新启航来接过这么些Intent。要是它的开行模式注解为 “multiple”(默认值),并且你未曾在这些Intent中装置FLAG_ACTIVITY_SINGLE_TOP标志,那么它将关门然后再一次创制;对于其他的起步形式,或者在这多少个Intent中安装FLAG_ACTIVITY_SINGLE_TOP标志,都将把这些Intent投递到如今这一个实例的onNewIntent()中。 
  那一个启动情势还足以与FLAG_ACTIVITY_NEW_TASK结合起来使用:用于启动一个Task中的根Activity,它会把这多少个Task中其他运行的实例带入前台,然后去掉它直到根Activity。这不行有用,例如,当从Notification Manager处启动一个Activity。 

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 

    假使设置那个标志,那么些activity不管是从一个新的栈启动仍旧从已有栈推到栈顶,它都将以the front door of the task的措施启动。这就讲导致其他与行使相关的栈都讲重置到健康情形(不管是正值讲activity移入仍旧移除),假设需要,或者直接重置该栈为最先状态。

FLAG_ACTIVITY_SINGLE_TOP 
  假如设置,当这些Activity位于历史stack的下面运行时,不再启动一个新的

FLAG_ACTIVITY_BROUGHT_TO_FRONT 
  这一个标志一般不是由程序代码设置的,如在launchMode中装置singleTask格局时系统帮您设定。 

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 
  假如设置,这将在Task的Activity stack中设置一个还原点,当Task苏醒时,需要清理Activity。也就是说,下五次Task带着 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记进入前台时(典型的操作是用户在主画面重启它),这个Activity和它之上的都将闭馆,以至于用户不可能再重返到它们,但是足以回来在此之前的Activity。 
  这在你的先后有分割点的时候很有用。例如,一个e-mail应用程序可能有一个操作是查看一个附件,需要启动图片浏览Activity来呈现。那多少个 Activity应该作为e-mail应用程序Task的一有些,因为这是用户在这多少个Task中触发的操作。然则,当用户距离这么些Task,然后从主画面选拔e-mail app,我们恐怕希望回到查看的对话中,但不是翻开图片附件,因为这令人疑惑。通过在开行图片浏览时设定这么些标志,浏览及此外启动的Activity在下次用户再次回到到mail程序时都将一切解除。 

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 
  假使设置,新的Activity不会在前不久起动的Activity的列表中保留。 

FLAG_ACTIVITY_FORWARD_RESULT 
  假使设置,并且那么些Intent用于从一个存在的Activity启动一个新的Activity,那么,这多少个作为回应目的的Activity将会传出这些新的Activity中。这种模式下,新的Activity可以调用setResult(int),并且这些结果值将发送给这些作为回答目的的 Activity。 

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 
  这些标志一般不由应用程序代码设置,尽管这一个Activity是从历史记录里启动的(常按HOME键),那么,系统会帮您设定。 

FLAG_ACTIVITY_MULTIPLE_TASK 
  不要采用这个标志,除非你协调实现了应用程序启动器。与FLAG_ACTIVITY_NEW_TASK结合起来使用,可以禁用把已存的Task送入前台的一言一行。当设置时,新的Task总是会启动来拍卖Intent,而不管这是是否早已有一个Task可以处理相同的事务。 
  由于默认的系列不分包图形Task管理效用,由此,你不应该使用这个标志,除非您提供给用户一种办法得以回去到已经起步的Task。 
  如果FLAG_ACTIVITY_NEW_TASK标志没有安装,这么些标志被忽视。 

 

FLAG_ACTIVITY_NO_ANIMATION 
  倘诺在Intent中安装,并传递给Context.startActivity()的话,这一个标志将堵住系统进入下一个Activity时选用 Acitivity迁移动画。这并不意味着动画将不用运行——即使另一个Activity在开行显示从前,没有点名这一个标志,那么,动画将被利用。那一个标志可以很好的用于执行一系列的操作,而动画片被看作是更高一流的风波的驱动。 

FLAG_ACTIVITY_NO_HISTORY 
  就算设置,新的Activity将不再历史stack中保留。用户一离开它,这一个Activity就关闭了。这也得以透过安装noHistory特性。 

FLAG_ACTIVITY_NO_USER_ACTION 
  如果设置,作为新启动的Activity进入前台时,这一个标志将在Activity暂停在此以前阻止从最前沿的Activity回调的onUserLeaveHint()。 
  典型的,一个Activity可以凭借这个回调指显明式的用户动作引起的Activity移出后台。这多少个回调在Activity的生命周期中标记一个恰如其分的点,并关闭部分Notification。 
  如果一个Activity通过非用户驱动的风波,如来电或闹钟,启动的,这多少个标志也应有传递给Context.startActivity,保证暂停的Activity不认为用户已经知晓其Notification。 

FLAG_ACTIVITY_PREVIOUS_IS_TOP 
  If set and this intent is being used to launch a new activity from an existing one, the current activity will not be counted as the top activity for deciding whether the new intent should be delivered to the top instead of starting a new one. The previous activity will be used as the top, with the assumption being that the current activity will finish itself immediately. 

FLAG_ACTIVITY_REORDER_TO_FRONT 
  假诺在Intent中安装,并传递给Context.startActivity(),这些标志将引发已经运行的Activity移动到历史stack的上方。 
  例如,若是一个Task由五个Activity组成:A,B,C,D。假若D调用startActivity()来启动Activity B,那么,B会移动到历史stack的下面,现在的顺序变成A,C,D,B。假如FLAG_ACTIVITY_CLEAR_TOP标志也安装的话,那么这个标志将被忽视。 

9、 请描述下Activity的生命周期。

答:activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();

看得出生命周期:从onStart()直到系统调用onStop()

前台生命周期:从onResume()直到系统调用onPause()

10、 activity在屏幕旋转时的生命周期

答:不设置Activity的android:configChanges时,切屏会重新调用各类生命周期,切横屏时会执行四回,切竖屏时会执行一次;设置Activity的android:configChanges=”orientation”时,切屏依旧会再一次调用各个生命周期,切横、竖屏时只会履行三回;设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重复调用各种生命周期,只会实施onConfigurationChanged方法

11、 怎么着启用瑟维斯(Service),如何停用Service。

服务的付出比较简单,如下:

第一步:继承Service类

public class SMSService extends Service {}

第二步:在AndroidManifest.xml文件中的<application>节点里对劳务拓展安排:<service android:name=”.SMS瑟维斯(Service)(Service)” />

劳务不可以和谐运行,需要通过调用Context.start瑟维斯(Service)()或Context.bind瑟维斯(Service)()方法启动服务。那四个法子都得以启动瑟维斯(Service),不过它们的使用场馆有所不同。使用startService(Service)()方法启用服务,调用者与劳动中间从未牵涉,尽管调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与劳动绑定在了共同,调用者一旦退出,服务也就停下,大有“不求同时生,必须同时死”的特征。

只要打算利用Context.start瑟维斯(Service)(Service)()方法启动服务,在劳动未被创制时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。假设调用start瑟维斯(Service)(Service)()方法前服务已经被成立,多次调用startService()方法并不会招致多次创设服务,但会招致多次调用onStart()方法。拔取start瑟维斯(Service)(Service)()方法启动的劳动,只好调用Context.stop瑟维斯(Service)(Service)()方法停止劳动,服务截止时会调用onDestroy()方法。

若果打算利用Context.bind瑟维斯(Service)(Service)()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这一个时候调用者和劳动绑定在联名,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。假设调用bindService()方法前服务已经被绑定,多次调用bindService(Service)()方法并不会造成多次创战胜务及绑定(也就是说onCreate()和onBind()方法并不会被反复调用)。要是调用者希望与正在绑定的劳动解除绑定,可以调用unbind瑟维斯(Service)()方法,调用该措施也会导致系统调用服务的onUnbind()–>onDestroy()方法。

 

劳务常用生命周期回调方法如下: 

onCreate() 该办法在劳动被创建时调用,该措施只会被调用三回,无论调用多少次start瑟维斯(Service)(Service)()或bind瑟维斯(Service)()方法,服务也只被成立五次。

onDestroy()该措施在劳务被终止时调用。

与使用Context.start瑟维斯(Service)()方法启动服务有关的生命周期方法

onStart() 只有应用Context.start瑟维斯(Service)()方法启动服务时才会回调该办法。该措施在劳动起先运行时被调用。多次调用startService(Service)()方法即便不会频繁创办服务,但onStart() 方法会被反复调用。

与应用Context.bindService(Service)()方法启动服务有关的生命周期方法

onBind()只有拔取Context.bind瑟维斯(Service)()方法启动服务时才会回调该方法。该方法在调用者与劳务绑定时被调用,当调用者与劳务一度绑定,多次调用Context.bindService(Service)()方法并不会促成该形式被频繁调用。

onUnbind()唯有利用Context.bind瑟维斯(Service)(Service)()方法启动服务时才会回调该格局。该模式在调用者与劳务解除绑定时被调用

 

12、 注册广播有三种艺术,这个点子有何优缺点?请谈谈Android引入广播机制的意向。

答:首先写一个类要继承布罗德castReceiver

第一种:在清单文件中宣称,添加

<receive android:name=”.IncomingSMSReceiver ” >

<intent-filter>

   <action android:name=”android.provider.Telephony.SMS_RECEIVED”)

<intent-filter>

<receiver>

第二种选拔代码举办登记如:

IntentFilter filter =  new IntentFilter(“android.provider.Telephony.SMS_RECEIVED”);

IncomingSMSReceiver receiver = new IncomgSMSReceiver();

registerReceiver(receiver.filter);

二种注册类型的界别是:

1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。

2)第三种是常驻型,也就是说当应用程序关闭后,即便有音信播报来,程序也会被系统调用自动运行。

 

13、 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的涉及。

答:简单来讲,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler举办Message的分发和处理.

Message Queue(音讯队列):用来存放通过Handler发表的新闻,平日附属于某一个创设它的线程,可以透过Looper.myQueue()拿到当前线程的音信队列

Handler:可以通告依然处理一个音信仍旧操作一个Runnable,通过Handler发表信息,信息将只会发送到与它涉及的新闻队列,然也只能处理该新闻队列中的信息

Looper:是Handler和新闻队列之间通讯桥梁,程序组件首先通过Handler把音信传递给Looper,Looper把音信放入队列。Looper也把音信队列里的信息广播给持有的

Handler:Handler接受到音信后调用handleMessage举办处理

Message:新闻的品类,在Handler类中的handleMessage方法中得到单个的音信举办拍卖

在单线程模型下,为了线程通信问题,Android设计了一个Message Queue(音讯队列), 线程间可以因此该Message Queue并组成Handler和Looper组件举行新闻置换。下边将对它们举行独家介绍:

1. Message 

    Message音信,精晓为线程间互换的信息,处理数量后台线程需要更新UI,则发送Message内含一些数目给UI线程。

2. Handler 

    Handler处理者,是Message的重要处理者,负责Message的出殡,Message内容的实践拍卖。后台线程就是经过传进来的 Handler对象引用来sendMessage(Message)。而拔取Handler,需要implement 该类的 handleMessage(Message)方法,它是处理这么些Message的操作内容,例如Update UI。日常需要子类化Handler来实现handleMessage方法。

3. Message Queue 

    Message Queue信息队列,用来存放在通过Handler揭橥的信息,遵照先进先出执行。

    每个message queue都会有一个遥相呼应的Handler。Handler会向message queue通过二种格局发送信息:sendMessage或post。这三种消息都会插在message queue队尾并按先进先出执行。但经过这两种办法发送的音信执行的法门略有不同:通过sendMessage发送的是一个message对象,会被 Handler的handleMessage()函数处理;而通过post方法发送的是一个runnable对象,则会融洽实施。

4. Looper 

    Looper是每条线程里的Message Queue的管家。Android没有Global的Message Queue,而Android会自动替主线程(UI线程)建立Message Queue,但在子线程里并从未建立Message Queue。所以调用Looper.getMainLooper()拿到的主线程的Looper不为NULL,但调用Looper.myLooper() 拿到当前线程的Looper就有可能为NULL。对于子线程使用Looper,API Doc提供了不易的使用方法:这一个Message机制的大致流程:

    1. 在Looper.loop()方法运行起来后,循环地依据接收顺序取出Message Queue里面的非NULL的Message。

    2. 一方始Message Queue里面的Message都是NULL的。当Handler.sendMessage(Message)到Message Queue,该函数里面安装了丰富Message对象的target属性是眼下的Handler对象。随后Looper取出了老大Message,则调用 该Message的target指向的Hander的dispatchMessage函数对Message举行拍卖。在dispatchMessage方法里,咋样处理Message则由用户指定,多少个判断,优先级从高到低:

    1) Message里面的Callback,一个实现了Runnable接口的目标,其中run函数做处理工作;

    2) Handler里面的mCallback指向的一个实现了Callback接口的目标,由其handleMessage举办处理;

    3) 处理音讯Handler对象对应的类继承并实现了其中handleMessage函数,通过这些实现的handleMessage函数处理音信。

    可想而知,我们落实的handleMessage方法是优先级最低的!

    3. Handler处理完该Message (update UI) 后,Looper则设置该Message为NULL,以便回收!

    在网上有过多稿子讲述主线程和此外子线程如何相互,传送信息,最后什么人来实施处理新闻等等的,个人知道是最简便易行的艺术——判断Handler对象里面的Looper对象是属于哪条线程的,则由该线程来执行! 

    1. 当Handler对象的构造函数的参数为空,则为近来所在线程的Looper; 

2. Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()拿到的是眼前线程的Looper对象。

14、 简要表明一下activity、 intent 、intent filter、service、布罗德case、布罗德caseReceiver

答:一个activity展现了一个用户能够操作的可视化用户界面;一个service不带有可见的用户界面,而是在后台运行,可以与一个activity绑定,通过绑定表透露来接口并与其举行通信;一个broadcast receiver是一个收到播放音讯并做出回复的component,broadcast receiver没有界面;一个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文件中表明的。

15、 说说mvc情势的原理,它在android中的运用,android的合法提出应用程序的支出应用mvc格局。何谓mvc?

mvc是model,view,controller的缩写,mvc包含多少个部分:

  模型(model)对象:是应用程序的中央部分,所有的工作逻辑都应有写在该层。

  视图(view)对象:是应用程序中负责生成用户界面的有的。也是在任何mvc架构中用户唯一可以观望的一层,接收用户的输入,展现处理结果。

  控制器(control)对象:是基于用户的输入,控制用户界面数据呈现及立异model对象情状的部分,控制器更要紧的一种导航效能,响应用户出发的连带事件,交给m层处理。

  android鼓励弱耦合和组件的选定,在android中mvc的实际显示如下:

  1)视图层(view):一般选择xml文件举行界面的叙述,使用的时候可以丰裕有利于的引入,当然,如果您对android精晓的相比的多了话,就决然可以想到在android中也得以利用javascript+html等的法门作为view层,当然这里需要开展java和javascript之间的通信,幸运的是,android提供了它们之间充裕有益的通信实现。

  2)控制层(controller):android的控制层的使命经常落在了成千上万的acitvity的肩上,这句话也就暗含了永不在acitivity中写代码,要经过activity交割model业务逻辑层处理,那样做的另外一个缘故是android中的acitivity的响应时间是5s,假若耗时的操作放在那里,程序就很容易被回收掉。

  3)模型层(model):对数据库的操作、对网络等的操作都应当在model里面处理,当然对工作统计等操作也是必须放在的该层的。

16、 什么是ANR 咋样避免它?

答:ANR:Application Not Responding。在Android中,活动管理器和窗口管理器这五个系统服务承担监视应用程序的响应,当用户操作的在5s内应用程序没能做出反应,布罗德(Broad)castReceiver在10秒内并未执行完毕,就会出现应用程序无响应对话框,这既是ANR。

避免情势:Activity应该在它的重中之重生命周期方法(如onCreate()和onResume())里尽可能少的去做创立操作。潜在的耗时操作,例如网络或数据库操作,或者高耗时的预计如改变位图尺寸,应该在子线程里(或者异步形式)来成功。主线程应该为子线程提供一个Handler,以便形成时可以交给给主线程。

17、 什么情况会促成Force Close ?咋样避免?能否捕获导致其的老大?

答:程序出现非常,比如nullpointer。

避免:编写程序时逻辑连贯,思维缜密。能捕获相当,在logcat中能看到那么些信息

18、 描述一下android的序列架构

android系统架构分从下往上为linux 内核层、运行库、应用程序框架层、和采用程序层。

linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。

libraries和 android runtime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit(引擎),该函数库负责 android网页浏览器的运行,例如标准的c函数库libc、openssl、sqlite等,当然也包括帮助游戏支付2dsgl和 3dopengles,在多媒体方面有mediaframework框架来帮忙各个影音和图形文件的播报与映现,例如mpeg4、h.264、mp4、 aac、amr、jpg和png等许多的多媒体文件格式。android的runtime负责解释和实践生成的dalvik格式的字节码。

 applicationframework(应用软件架构),java应用程序开发人士首假诺选取该层封装好的api举行急忙支付。

  applications:该层是java的拔取程序层,android内置的googlemaps、e-mail、即时通信工具、浏览器、mp4播放器等处于该层,java开发人士开发的顺序也处在该层,而且和松手的应用程序具有同等的岗位,可以调用内置的应用程序,也得以替换内置的应用程序。

  上边的四个层次,下层为上层服务,上层需要下层的帮助,调用下层的劳务,这种严俊分层的点子带来的庞大的康乐、灵活性和可扩大性,使得不同层的开发人士可以遵照标准专心特定层的开支。

android应用程序使用框架的api并在框架下运作,这就牵动了程序开发的可观一致性,另一方面也告知大家,要想写出优质便捷的次序就不可以不对整个 applicationframework进行特别尖锐的了然。通晓applicationframework,你就足以真正的了解android的计划和运行机制,也就更可以驾驶整个应用层的支付。

19、 请介绍下ContentProvider是如何促成数量共享的。

一个先后可以由此兑现一个Content provider的架空接口将协调的数额完全暴显露来,而且Content providers是以看似数据库中表的法子将数据透露。Content providers存储和摸索数据,通过它可以让拥有的应用程序访问到,这也是应用程序之间唯一共享数据的章程。

要想使应用程序的多少公开化,可经过2种办法:创制一个属于你协调的Content provider或者将您的数量增长到一个早就存在的Content provider中,前提是有同样数据类型并且有写入Content provider的权柄。

什么样通过一套标准及统一的接口获取此外应用程序透露的数额?

Android提供了ContentResolver,外界的次序可以透过ContentResolver接口访问ContentProvider提供的数码。

20、 Service和Thread的区别?

答:servie是系统的机件,它由系统经过托管(servicemanager);它们中间的通信类似于client和server,是一种轻量级的ipc通信,这种通信的载体是binder,它是在linux层交流音信的一种ipc。而thread是由本应用程序托管。1). Thread:Thread 是程序执行的细小单元,它是分配CPU的主干单位。可以用 Thread 来实施一些异步的操作。

2). 瑟维斯(Service):瑟维斯(Service)(Service) 是android的一种机制,当它运行的时候假如是Local 瑟维斯(Service),那么相应的 Service(Service) 是运行在主进程的 main 线程上的。如:onCreate,onStart 那么些函数在被系统调用的时候都是在主进程的 main 线程上运行的。尽管是Remote 瑟维斯(Service),那么相应的 Service 则是运行在单身进程的 main 线程上。

既然这样,那么大家怎么要用 Service(Service) 呢?其实这跟 android 的系统编制有关,大家先拿 Thread 来说。Thread 的运作是独立于 Activity 的,也就是说当一个 Activity 被 finish 之后,如若你从未积极性截至 Thread 或者 Thread 里的 run 方法没有实施完毕的话,Thread 也会间接进行。由此这里会现出一个题目:当 Activity 被 finish 之后,你不再抱有该 Thread 的引用。另一方面,你未曾主目的在于不同的 Activity 中对同一 Thread 举办控制。  

举个例子:假诺你的 Thread 需要不停地隔一段时间就要连续服务器做某种同步的话,该 Thread 需要在 Activity 没有start的时候也在运转。这么些时候当您 start 一个 Activity 就从不主目的在于该 Activity 里面控制以前创制的 Thread。因而你便需要成立并启动一个 Service(Service) ,在 瑟维斯(Service) 里面制造、运行并操纵该 Thread,这样便解决了该问题(因为另外 Activity 都得以操纵同一 Service,而系统也只会创制一个对应 Service(Service) 的实例)。  

故而你可以把 Service(Service) 想象成一种音讯服务,而你可以在其他有 Context 的地点调用 Context.start瑟维斯(Service)(Service)、Context.stopService、Context.bindService(Service),Context.unbindService,来控制它,你也可以在 瑟维斯(Service)(Service) 里登记 布罗德(Broad)castReceiver,在任哪儿方通过发送 broadcast 来支配它,当然这多少个都是 Thread 做不到的。

21、 Android本身的api并未阐明会抛出相当,则其在运转时有无可能抛出runtime分外,你遇上过吧?诺有的话会造成什么样问题?如何解决?

答:会,比如nullpointerException。我遭遇过,比如textview.setText()时,textview没有初叶化。会招致程序不能正常运行出现forceclose。打开控制台查看logcat音讯找出卓殊信息并修改程序。

22、 IntentService(Service)有何优点?

答:Acitivity的长河,当处理Intent的时候,会暴发一个遥相呼应的瑟维斯(Service)(Service); Android的经过处理器现在会尽可能的不kill掉你;非凡容易使用

23、 就算后台的Activity由于某原因被系统回收了,咋样在被系统回收以前封存当前情景?

答:重写onSaveInstanceState()方法,在此方法中保存需要保留的数码,该办法将会在activity被回收以前调用。通过重写onRestoreInstanceState()方法能够从中提取保存好的多寡

24、 如何将一个Activity设置成窗口的体裁。

答:<activity>中配置:android :theme=”@android:style/Theme.Dialog” 

除此以外android:theme=”@android:style/Theme.Translucent” 是设置透明

25、 怎么样退出Activity?怎么样安全退出已调用三个Activity的Application?

答:对于单一Activity的采纳来说,退出很简短,直接finish()即可。当然,也足以用killProcess()和System.exit()这样的法子。

对此五个activity,1、记录打开的Activity:每打开一个Activity,就记录下来。在急需退出时,关闭每一个Activity即可。2、发送特定广播:在需要收尾应用时,发送一个一定的播报,每个Activity收到广播后,关闭即可。3、递归退出:在打开新的Activity时行使startActivityForResult,然后自己加标志,在onActivityResult中拍卖,递归关闭。为了编程方便,最好定义一个Activity基类,处理这一个共通问题。

 

在2.1在此之前,可以利用ActivityManager的restartPackage方法。

它可以一贯截止所有应用。在行使时索要权限android.permission.RESTART_PACKAGES。

只顾不要被它的名字迷惑。

只是,在2.2,这多少个办法失效了。在2.2添加了一个新的法门,killBackground Processes(),需要权限 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、抛分外强制退出:

该办法通过抛万分,使程序Force Close。

注解可以,不过,需要解决的题目是,怎么着使程序截止掉,而不弹出Force Close的窗口。

2、记录打开的Activity:

每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。

3、发送特定广播:

在需要收尾应用时,发送一个一定的播报,每个Activity收到广播后,关闭即可。

4、递归退出

在开拓新的Activity时采取startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

而外第一个,都是想艺术把每一个Activity都得了掉,直接达到目标。不过那样做同样不周密。你会意识,即便协调的应用程序对每一个Activity都设置了nosensor,在六个Activity截止的茶余饭后,sensor可能有效了。但最少,我们的目标达到了,而且没有影响用户使用。为了编程方便,最好定义一个Activity基类,处理这些共通问题。

 

26、 AIDL的完备是哪些?如何行事?能处理哪些类型的多寡?

答:全称是:Android Interface Define Language

在Android中, 每个应用程序都可以有自己的进程. 在写UI应用的时候, 平时要用到Service(Service). 在不同的过程中, 怎么样传递对象啊?显明, Java中不允许跨进程内存共享. 由此传递对象, 只好把对象拆分成操作系统能知晓的简易款式, 以高达跨界对象访问的目标. 在J2EE中,选拔RMI的章程, 可以经过连串化传递对象. 在Android中, 则采纳AIDL的格局. 理论上AIDL能够传递Bundle,实际上做起来却相比麻烦。

AIDL(AndRoid接口描述语言)是一种借口描述语言; 编译器可以透过aidl文件生成一段代码,通过事先定义的接口达到四个过程之中通信进程的目标. 如若急需在一个Activity中, 访问另一个Service(Service)中的某个对象, 需要先将目的转化成AIDL可识另外参数(可能是三个参数), 然后使用AIDL来传递那一个参数, 在信息的接收端, 使用这个参数组装成团结需要的对象.

AIDL的IPC的机制和COM或CORBA类似, 是依据接口的,但它是轻量级的。它拔取代理类在客户端和促成层间传递值. 假如要利用AIDL, 需要做到2件业务: 1. 引入AIDL的相干类.; 2. 调用aidl发生的class.

AIDL的成立方法:

AIDL语法很简单,可以用来声称一个带一个或三个法子的接口,也足以传递参数和再次回到值。 由于长途调用的需要, 这个参数和再次来到值并不是其余类型.下边是些AIDL补助的数据类型:

1. 不需要import声明的简便Java编程语言类型(int,boolean等)

2. String, CharSequence不需要独特表明

3. List, Map和Parcelables类型, 那些项目内所包含的数目成员也不得不是简简单单数据类型, String等此外比襄助的类型.

(此外: 我没尝试Parcelables, 在Eclipse+ADT下编译可是, 或许未来会持有帮助)

27、 请解释下Android程序运行时权限与文件系统权限的界别。

答:运行时权限Dalvik( android授权) 

文件系统 linux 内核授权

28、 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请证实原因。

通过直接发送Uri把参数带过去,或者经过manifest里的intentfilter里的data属性

 

29、 android系统的优势和不足

答:Android平台手机 5大优势: 

一、开放性 

在优势方面,Android平台首先就是其开发性,开发的阳台允许其他活动终端厂商投入到Android联盟中来。显明的开放性能够使其独具更多的开发者,随着用户和采纳的逐渐丰盛,一个全新的阳台也将很快走向成熟。开放性对于Android的前进而言,有利于积累人气,这里的人气席卷消费者和厂商,而对此消费者来讲,随大的受益正是丰硕的软件资源。开放的阳台也会带动更大竞争,如此一来,消费者将得以用更低的标价购得心仪的手机。

二、挣脱运营商的束缚 

在过去很长的一段时间,特别是在欧美地区,手机使用往往受到运营商制约,使用什么效率衔接什么网络,几乎都碰着运营商的主宰。从二零一八年BlackBerry 上市 ,用户可以更加便利地接连网络,运营商的掣肘裁减。随着EDGE、HSDPA这一个2G至3G移动网络的日趋过渡和提升,手机随意接入网络已不是营业商口中的笑谈,当您可以因而手机IM软件方便地举行及时聊天时,再回想不久前些天价的彩信和图铃下载业务,是不是像梦魇一样?互联网巨头Google推动的Android终端天生就有网络特色,将让用户离互联网更近。

三、丰富的硬件采用 

这或多或少仍旧与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功用特色各具的多种产品。功用上的差别和特性,却不会影响到数码同步、甚至软件的十分,好比你从黑莓 Symbian风格手机 一下改用苹果 索尼爱立信 ,同时还可将Symbian中有口皆碑的软件带到BlackBerry上行使、联系人等材料更加可以一本万利地转换,是不是这个有利啊?

四、不受任何限制的支出商 

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平夏洛蒂(Charlotte),由于其开放性,软件更多倚重第三方厂商,比如Android系统的SDK中就没有放置音乐 播放器,全体依赖第三方支付,贫乏了出品的统一性。

30、 Android dvm的长河和Linux的过程, 应用程序的过程是否为同一个概念 

答:DVM指dalivk的虚拟机。每一个Android应用程序都在它和谐的过程中运行,都有所一个独自的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个过程,所以说可以认为是同一个概念。

31、 sim卡的EF文件是怎么着?有何意义

答:sim卡的文件系统有谈得来专业,重倘若为着和手机通讯,sim本 身可以有友好的操作系统,EF就是作存储并和手机通讯用的

32、 嵌入式操作系统内存管理有哪三种, 各有何特点

  页式,段式,段页,用到了MMU,虚拟空间等技巧

33、 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?

嵌入式实时操作系统是指当外界事件或数额发生时,可以经受并以丰裕快的速度予以拍卖,其拍卖的结果又能在确定的时光之内来控制生育过程或对拍卖连串作出连忙响应,并决定所有实时任务协调一致运行的嵌入式操作系统。首要用来工业控制、 军事设施、 航空航天等世界对系统的响应时间有苛刻的要求,这就需要利用实时系统。又可分为软实时和强壮时二种,而android是基于linux内核的,由此属于软实时。

34、 一条最长的短消息约占多少byte?

  普通话70(包括标点),英文160,160个字节。  

35、 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图样像素值音信。请写一个算法,将该图形所有的反革命不透明(0xffffffff)像素点的透明度调整为50%。

36、 咋样将SQLite数据库(dictionary.db文件)与apk文件一起公布

解答:能够将dictionary.db文件复制到Eclipse Android工程中的res aw目录中。所有在res aw目录中的文件不会被缩减,这样能够直接领取该目录中的文件。可以将dictionary.db文件复制到res aw目录中

37、 怎么着将打开res aw目录中的数据库文件?

解答:在Android中不可能一贯打开res aw目录中的数据库文件,而急需在程序首次启动时将该文件复制到手机内存或SD卡的某部目录中,然后再打开该数据库文件。

复制的核心措施是使用getResources().openRawResource方法拿到res aw目录中资源的 InputStream对象,然后将该InputStream对象中的数据写入另外的目录中相应文件中。在Android SDK中得以行使SQLiteDatabase.openOrCreateDatabase方法来开辟任意目录中的SQLite数据库文件。

38、 DDMS和TraceView的区别? 

DDMS是一个程序执行查看器,在其中可以看见线程和储藏室等音信,TraceView是先后性能分析器 。

39、 java中咋样引用本地语言 

可以用JNI(java native interface  java 本地接口)接口 。

40、 谈谈Android的IPC(进程间通信)机制 

IPC是里面进程通信的简称, 是共享”命名管道”的资源。Android中的IPC机制是为了让Activity和瑟维斯(Service)之间可以每一天的进展交互,故在Android中该机制,只适用于Activity和Service之间的通信,类似于远程方法调用,类似于C/S格局的走访。通过定义AIDL接口文件来定义IPC接口。Servier端实现IPC接口,Client端调用IPC接口本地代理。

41、 NDK是什么

NDK是有些列工具的联谊,NDK提供了一多级的工具,帮忙开发者急速的开支C/C++的动态库,并能自动将so和java 应用打成apk包。

NDK集成了接力编译器,并提供了相应的mk文件和隔离cpu、平台等的差异,开发人士只需简单的修改mk文件就可以创设出so

发表评论

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