[转载]766游戏网官网android 面试题2次采访

初稿地址:android 面试题2次收集作者:android追梦者

1、 Android dvm的历程和Linux的历程, 应用程序的长河是否为同一个定义

  DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的经过中运作,都怀有一个单身的Dalvik虚拟机实例。而每一个DVM都是在Linux
中的一个历程,所以说可以认为是同一个定义。

  2、sim卡的EF 文件有何意义

  sim卡的文件系统有和好专业,首即便为了和手机通讯,sim本
身可以有谈得来的操作系统,EF就是作存储并和手机通讯用的

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

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

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

  嵌入式实时操作系统是指当外界事件或数额发生时,可以经受并以充裕快的进度予以处理,其处理的结果又能在规定的年华之内来支配生育过程或对处理序列作出急迅响应,并操纵所有实时任务协调一致运行的嵌入式操作系统。首要用来工业控制、
军事设施、
航空航天等领域对系统的响应时间有苛刻的要求,这就需要运用实时系统。又可分为软实时和矫健时二种,而android是基于linux内核的,因而属于软实时。

  5、一条最长的短信息约占多少byte?

  国语70(包括标点),英文160,160个字节。

  6、 android中的动画有哪几类,它们的特征和界别是怎么着?

  三种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现格局得以使视图组件移动、放大、缩短以及爆发透明度的变化;另一种Frame动画,传统的卡通方法,通过逐个的播放排列好的图纸来实现,类似电影。

  7、handler机制的规律

  andriod提供了 Handler 和 Looper 来满意线程间的通信。Handler
先进先出原则。Looper类用来管理特定线程内对象之间的音讯交流(Message
Exchange)。

  1)Looper:
一个线程可以生出一个Looper对象,由它来治本此线程里的Message
Queue(音信队列)。

  2)Handler:
你可以协会Handler对象来与Looper交换,以便push新音信到Message
Queue里;或者收受Looper从Message Queue取出)所送来的音信。

  3) Message Queue(音信队列):用来存放线程放入的音讯。

  4)线程:UI thread 通常就是main
thread,而Android启动程序时会替它白手起家一个Message Queue。

  8、说说mvc情势的原理,它在android中的运用

         android的法定指出应用程序的开销应用mvc形式。何谓mvc?

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

  l模型(model)对象:是应用程序的着重点部分,所有的业务逻辑都应有写在该层。

  l视图(view)对象:是应用程序中顶住生成用户界面的部分。也是在整个mvc架构中用户唯一可以见到的一层,接收用户的输入,突显处理结果。

  l控制器(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里面处理,当然对业务统计等操作也是必须放在的该层的。

  9、Activity的生命周期

  和此外手机 平台 的使用 程序 一样,Android的使用程序
的生命周期是被联合掌控 的,也

  就是说我们写的应用程序命局通晓在别人(系统)的手里,我们不可能更改它,只能上学

  适应它。

  简单地说一下为何是这么:我们手机在运行
一个应用程序的时候,有可能打进去电话

  发进来短信
,或者没有电了,这时候程序都会被中止,优先去服务电话的基本功用 ,另

  外系统也不允许你占用太多资源
,至少要确保电话职能吗,所以资源紧缺的时候也就有可

  能被干掉。

  言归正传,Activity的为主生命周期如下代码 所示:

  Java代码

  public

  class MyActivity extends Activity {

  protected

  void onCreate(Bundle savedInstanceState);

  protected

  void onStart();

  protected

  void onResume();

  protected

  void onPause();

  protected

  void onStop();

protected

  void onDestroy();

  }

  public class MyActivity extends Activity { protected void
onCreate(Bundle savedInstanceState); protected void onStart(); protected
void onResume(); protected void onPause(); protected void onStop();
protected void onDestroy(); }

  你协调写的Activity会按需要
重载这多少个点子,onCreate是免不了的,在一个Activity正常启动的进程中,他们被调用的次第是
onCreate -> onStart -> onResume,
在Activity被干掉的时候顺序是onPause -> onStop -> onDestroy
,这样就是一个一体化的生命周期,但是有人问了
,程序正运行着啊来电话了,这一个顺序咋做?中止了嘛,如若中止的时候新出的一个Activity是全屏的那么:onPause->onStop
,苏醒的时候onStart->onResume ,假使打断
这些应用程序的是一个Theme为Translucent 或者Dialog
的Activity那么只是onPause ,復苏 的时候onResume 。

  详细介绍一下这么些格局中系统在做什么以及我们应有做哪些:

  onCreate: 在这边成立界面 ,做一些数据 的开头化工作

  onStart: 到这一步变成用户可见不可相互 的

  onResume: 变成和用户可相互 的,(在activity
栈系统经过栈的格局管理这多少个个

  Activity的最下面,运行完弹出栈,则赶回上一个Activity)

  onPause: 到这一步是可见但不得互相 的,系统会告一段落动画 等消耗CPU
的事情

  从上文的讲述已经清楚,应该在这里保留你的部分多少,因为这多少个时候

  你的次第的优先级降低,有可能被系统注销。在这边保留的数据,应该在

  onResume里读出来,注意:这么些法子里做的事务时刻要短,因为下一

  个activity不会等到这一个主意成功才起步

  onstop: 变得不可见 ,被下一个activity覆盖了

  onDestroy:
这是activity被干掉前最终一个被调用方法了,可能是外面类调用finish方

  法或者是系统为了省去空间将它暂时的干掉,可以用isFinishing()来判

  断它,如果您有一个Progress Dialog在线程中转动,请在onDestroy里

  把她cancel掉,不然等线程截止的时候,调用Dialog的cancel方法会抛

  异常的。

  onPause,onstop, onDestroy,两种情状 下 activity都有可能被系统干掉

为了保险程序的正确性,你要在onPause()里写上持久层操作的代码,将用户编辑的始末都保存到存储介质上(一般都是数额库
)。实际工作中因为生命周期的成形而带来的题材也很多,比如你的应用程序起了新的线程在跑,这时候中断了,你还要去珍视非凡线程,是刹车或者杀掉依旧多少回滚,是吧?因为Activity可能被杀掉,所以线程中应用的变量和有些界面元素就相对要小心了,一般都是采纳Android的音讯机制
[Handler,Message]来处理多线程和界面交互的问题。

  10、让Activity变成一个窗口:Activity属性设定

  讲点轻松的呢,可能有人愿意做出来的应用程序是一个漂移在手机主界面的东西,那么很

  简单你只需要安装 一下Activity的要旨就可以了在AndroidManifest.xml
中定义 Activity的

  地点一句话:

  Xml代码

  android :theme=”@android:style/Theme.Dialog”

  android:theme=”@android:style/Theme.Dialog”

  这就使你的应用程序变成对话框的情势弹出来了,或者

  Xml代码

  android:theme=”@android:style/Theme.Translucent”

  android:theme=”@android:style/Theme.Translucent”

  就改成半晶莹剔透的,[友谊指示-.-]恍如的那种activity的性能能够在android.R.styleable
类的AndroidManifestActivity
方法中看看,AndroidManifest.xml中具有因素的习性的介绍都可以参见这么些类android.R.styleable

  下面说的是性质名称,具体有怎样值是在android.R.style中
可以看出,比如这一个”@android:style/Theme.Dialog”
就对应于android.R.style.Theme_Dialog ,(‘_’换成’.’ <
–注意:这一个是作品内容不是笑容)就足以用在叙述文件
中了,找找类定义和描述文件中的对应关系就都知晓了。

  11、 你后台的Activity被系统回收如何是好:onSaveInstanceState

当你的程序中某一个Activity A
在运转时中,主动或被动地运转另一个新的Activity B

  这一个时候A会举办

  Java代码

  public

  void onSaveInstanceState(Bundle outState) {

  super.onSaveInstanceState(outState);

  outState.putLong(“id”, 1234567890);

  }

  B 完成以后又会来找A,
这一个时候就有二种状态,一种是A被回收,一种是尚未被回收,被回

  收的A就要再度调用onCreate()方法,不同于直接开行的是这回onCreate()里是带上参数

  savedInstanceState,没被收回的就依然onResume就好了。

  savedInstanceState是一个Bundle对象,你差不多可以把他知道为系统帮你维护的一个Map对象。在onCreate()里你可能会用到它,假若正常启动onCreate就不会有它,所以用的时候要咬定一下是不是为空。

  Java代码

  if(savedInstanceState != null){

  long id = savedInstanceState.getLong(“id”);

  }

  就像官方的Notepad教程
里的情况,你正在编制某一个note,突然被中断,那么就把那多少个note的id记住,再起来的时候就足以依据那个id去把卓殊note取出来,程序就总体一些。这也是看您的施用需不需要保存什么,比如你的界面就是读取一个列表,这就不需要特殊记住什么,哦,
没准你需要牢记滚动条的地方…

  12、 调用与被调用:我们的通信使者Intent

  要说Intent了,Intent就是其一这些意图
,应用程序间Intent举办交流,打个电话呀,来个

  电话呀都会发Intent,
那多少个是Android架构的松耦合的精华部分,大大提高了组件的复用性,比如你要在您的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先:

  Java代码

    Intent intent = new Intent();

  intent.setAction(Intent.ACTION_CALL);

  intent.setData(Uri.parse(“tel:” + number));

  startActivity(intent);

  扔出这样一个打算,系统看到了您的来意就指示了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这多少个局部计划
地确实很好哎。

  这Intent通过什么来告诉系统需要什么人来接受他啊?

  通常使用Intent有三种办法,第一种是直接证实需要哪一个类来接过代码如下:

  Java代码

  Intent intent = new Intent(this, MyActivity.class);

  intent.getExtras().putString(“id”, “1”);

  tartActivity(intent);

  第一种艺术很明朗,直接指定了MyActivity为接受方,并且传了有些多少给MyActivity,在MyActivity里可以用getIntent()来的到这么些intent和数码。

  第二种就需要先看一下AndroidMenifest中的intentfilter的布置了

  Xml代码

  < intent-filter>

  < action

  android:name=”android.intent.action.VIEW”

  />

  < action

  android:value=”android.intent.action.EDIT”

  />

  < action

  android:value=”android.intent.action.PICK”

  />

  < category

  android:name=”android.intent.category.DEFAULT”

  />

  < data

  android:mimeType=”vnd.android.cursor.dir/vnd.google.note”

  />

  < /intent-filter>

  这之中配备使用了action, data,
category那个事物,那么了然的您肯定想到intent里也会有这多少个事物,然后一匹配不就找到接收者了啊?

  action其实就是一个企图的字符串名称。

  上边这段intent-filter的配备文件申明了这些Activity可以承受不同的Action,当然相应的程序逻辑也不相同咯,提一下不胜
mimeType,他是在ContentProvider里定义的,你假使祥和实现一个ContentProvider就领悟了,必须指定
mimeType才能让数据被外人利用。

  不知情原理表了然没,总结一句,就是您调用此外界面不是直接new那么些界面,而是通过扔出一个intent,让系统帮您去调用这么些界面,这样就多么松藕合啊,而且适合了生命周期被系统管理的标准。

  想通晓category都有甚,Android为您预先定制好的action都有什么等等,请亲自拜会官方链接Intent

  ps:想清楚怎么调用系统应用程序的同学,可以仔细看一下你的logcat,每一次运行一个顺序的时候是不是有局部音信比如:

  Starting activity: Intent {
action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER}
flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker}
}

  再对照一下Intent的片段set方法,就清楚怎么调用咯,希望您喜爱:)

  13. 怎么退出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、抛分外强制退出:
该格局通过抛非常,使程序Force Close。
证实可以,但是,需要缓解的问题是,咋样使程序为止掉,而不弹出Force
Close的窗口。

2、记录打开的Activity:
每打开一个Activity,就记录下来。在急需退出时,关闭每一个Activity即可。

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

4、递归退出
在开拓新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

除却首个,都是想艺术把每一个Activity都截至掉,间接达到目标。
可是如此做一样不健全。
你会意识,倘若自己的应用程序对每一个Activity都安装了nosensor,在两个Activity截止的间隙,sensor可能立竿见影了。
但最少,我们的目标达到了,而且尚未影响用户采纳。

为了编程方便,最好定义一个Activity基类,处理这些共通问题。

摘自:http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

  14. 请介绍下Android中常用的五种布局。

     1、 LinearLayout – 线性布局。
orientation – 容器内元素的排列格局。vertical:
子元素们垂直排列;horizontal: 子元素们水平排列
gravity – 内容的排列格局。常用的有 top, bottom, left, right, center 等

2、 AbsoluteLayout – 相对布局。
layout_x – x 坐标。以左上角为顶点
layout_y – y 坐标。以左上角为顶点

3、 TableLayout – 表格式布局
     
表格布局重要以行列的模式来管理子控件,其中每一行即一个TableRow对象,每个TableRow对象可以添加子控件,并且每投入一个上空即一对一于添加了一列

4、 RelativeLayout – 相对布局。
 layout_centerInParent –
将如今币素放置到其容器内的水平方向和垂直方向的主旨地方(类似的属性有
:layout_centerHorizontal, layout_alignParentLeft 等)
layout_marginLeft – 设置当前因素相对于其容器的左手边缘的离开
layout_below – 放置当前因素到指定的元素的底下
  layout_alignRight – 当前因素与指定的元素右对齐

5、 FrameLayout – 层叠布局。以左上角为起源,将 FrameLayout
内的因素一层覆盖一层地呈现,在帧布局中,先添加的图样会被后添加的图片覆盖。

摘自:http://javalover00000.javaeye.com/blog/851266

  15. 请介绍下Android的数额存储模式。

     Android提供了5种方法存储数据:
    1、使用SharedPreferences存储数据;
    2、文件存储数据;
    3、SQLite数据库存储数据;
    4、使用ContentProvider存储数据;
    5、网络存储数据;
Android
中的数据存储都是个体的,其他应用程序都是无法访问的,除非通过ContentResolver获取其他程序共享的数量。

摘自:http://www.moandroid.com/?p=319

  16. 请介绍下ContentProvider是如何贯彻数据共享的。

一个顺序可以透过落实一个Content
provider的抽象接口将协调的多寡完全显暴露来,而且Content
providers是以接近数据库中表的主意将数据表露。Content
providers存储和搜索数据,通过它可以让拥有的应用程序访问到,这也是应用程序之间唯一共享数据的措施。要想使应用程序的数额公开化,可经过2种办法:创立一个属于你协调的Content
provider或者将你的多寡增长到一个一度存在的Content
provider中,前提是有相同数据类型并且有写入Content provider的权柄。

何以通过一套标准及统一的接口获取另外应用程序暴露的数量?Android提供了ContentResolver,外界的程序可以经过ContentResolver接口访问ContentProvider提供的数码。
 参考:http://www.moandroid.com/?p=319

  17. 哪些启用Service,如何停用瑟维斯(Service)(Service)。

1.先是种是因此调用Context.startService(Service)()启动,调用Context.stopService(Service)()为止,start瑟维斯(Service)()可以传递参数给Service(Service)

2.次之种方法是通过调用Context.bind瑟维斯(Service)()启动,调用Context.unbindservice()结束,还是可以透过Service(Service)Connection访问Service(Service)。

在瑟维斯(Service)(Service)每两次的拉开关闭过程中,唯有onStart可被一再调用(通过反复startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中不得不被调用一遍。

参考:http://www.cnblogs.com/feisky/archive/2010/06/14/1758336.html

  18.
登记广播有两种方法,这一个艺术有何优缺点?请谈谈Android引入广播机制的用意。

android中,不同进程之间传递信息要用到广播,可以有两种办法来促成。
首先种办法:在Manifest.xml中注册广播,是一种相比较推荐的不二法门,因为它不需要手动注销广播(假诺广播未废除,程序退出时或许会出错)。
切切实实实现在Manifest的application中丰裕:
<receiver android:name=”.mEvtReceiver”>
<intent-filter>
<action android:name=”android.intent.action.BOOT_COMPLETED” />
</intent-filter>
</receiver>
上边五个android:name分别是广播名和播音的动作(这里的动作是意味系统启动完成),如若要自己发送一个广播,在代码中为:
Intent i = new Intent(“android.intent.action.BOOT_COMPLETED”);
sendBroadcast(i);
诸如此类,广播就发出去了,然后是吸纳。
收受能够新建一个类,继承至布罗德(Broad)castReceiver,也足以建一个布罗德(Broad)castReceiver的实例,然后得写onReceive方法,实现如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(“android.intent.action.BOOT_COMPLETED”)) {
//Do something
}
}
};

其次种艺术,直接在代码中实现,但需要手动注册注销,实现如下:
IntentFilter filter = new IntentFilter();
filter.addAction(“android.intent.action.BOOT_COMPLETED”);
registerReceiver(mEvtReceiver, filter); //这时注册了一个recevier
,名为mEvtReceiver,然后同样用地点的章程以重写onReceiver,
说到底在先后的onDestroy中要吊销广播,实现如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}

Android系统中的广播是广阔用于应用程序之间通信的一种手段,它相仿于事件处理机制,不同的地点就是广播的处理是系统级其余事件处理过程(一般事件处理是控件级其它)。在此过程中如故是离不开Intent对象,精晓广播事件的处理过程,灵活运用广播处理机制,在重中之重之处往往能实现特其它效用,

在Android 中一旦要发送一个广播必须运用send布罗德(Broad)Cast
向系统发送对其感兴趣的播音接收器中。
选取广播必须要有一个intent 对象必设置其action动作对象
应用广播必须在布置文件中显式的指明该广播对象
历次收到播放都会另行生成一个收到播放的对象
在布罗德Cast 中尽量不要处理太多逻辑问题,指出复杂的逻辑交给Activity 或者
Service 去处理

转自:http://www.dengdeng.name/u/deng/archives/2010/92.html

        
http://www.cnblogs.com/TerryBlog/archive/2010/08/16/1801016.html

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

简单易行的说,Handler获取当前线程中的looper对象,looper用来从存放Message的MessageQueue中取出Message,再有Handler举办Message的散发和拍卖

参见:http://hi.baidu.com/���˲���/blog/item/4e576b7c58d742360cd7dac9.html

         http://blog.csdn.net/xuxinyl/archive/2010/12/25/6097560.aspx

  20. AIDL的全称是何等?怎么着工作?能处理哪些类型的数据?

AIDL全称Android Interface Definition Language(AndRoid接口描述语言)
是一种借口描述语言;
编译器可以透过aidl文件生成一段代码,通过事先定义的接口达到六个经过之中通信进程跨界对象访问的目的.AIDL的IPC的建制和COM或CORBA类似,
是依照接口的,但它是轻量级的。它应用代理类在客户端和贯彻层间传递值.
假使要采纳AIDL, 需要完成2件工作: 1. 引入AIDL的连锁类.; 2.
调用aidl爆发的class.理论上, 参数可以传递基本数据类型和String,
还有就是Bundle的派生类, 不过在Eclipse中,最近的ADT不扶助Bundle做为参数,

切切实实实现步骤如下:

1、创立AIDL文件, 在这些文件之中定义接口,
该接口定义了可供客户端访问的方法和总体性。

2、编译AIDL文件, 用Ant的话, 可能需要手动, 使用Eclipse
plugin的话,可以依照adil文件自动生产java文件并编译, 不需要人工到场.

3、在Java文件中, 实现AIDL中定义的接口. 编译器会按照AIDL接口,
爆发一个JAVA接口。那个接口有一个名为Stub的其中抽象类,它继续扩大了接口并实现了长途调用需要的多少个艺术。接下来就需要自己去落实自定义的多少个接口了.

4、向客户端提供接口ITaskBinder,
尽管写的是service,扩大该瑟维斯(Service)不分厚薄载onBind
()方法来回到一个落实上述接口的类的实例。

5、在劳务器端回调客户端的函数.
前提是当客户端获取的IBinder接口的时候,要去登记回调函数, 只有这么,
服务器端才精通该调用这么些函数

AIDL语法很粗略,可以用来声称一个带一个或两个措施的接口,也得以传递参数和重临值。
由于长途调用的内需,
这么些参数和再次来到值并不是此外类型.下面是些AIDL帮忙的数据类型:

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

  2. String, CharSequence不需要特殊注解

  3. List, Map和Parcelables类型,
    那一个品种内所蕴藏的多少成员也只能是简单数据类型,
    String等其余比协助的类型.

(此外: 我没尝试Parcelables, 在Eclipse+ADT下编译然而,
或许将来会有着协理).

心想事成接口时有几个尺码:

.抛出的不得了不要回来给调用者. 跨进程抛非常处理是不可取的.

.IPC调用是一块的。假设您知道一个IPC服务需要跨越几阿秒的光阴才能不辱使命地话,你应有避免在Activity的主线程中调用。
也就是IPC调用会挂起应用程序导致界面失去响应.
这种场地应当考虑单起一个线程来处理.

.不可以在AIDL接口中讲明静态属性。

IPC的调用步骤:

  1. 宣示一个接口类型的变量,该接口类型在.aidl文件中定义。

  2. 实现ServiceConnection。

3.
调用ApplicationContext.bindService(Service)(),并在瑟维斯(Service)(Service)Connection实现中开展传递.

4.
在ServiceConnection.onService(Service)Connected()实现中,你会收取一个IBinder实例(被调用的Service(Service)).
调用

YourInterfaceName.Stub.asInterface((IBinder)service)将参数转换为YourInterface类型。

  1. 调用接口中定义的点子。
    你总要检测到DeadObjectException万分,该特别在连接断开时被抛出。它只会被远程方法抛出。

  2. 断开连接,调用接口实例中的ApplicationContext.unbind瑟维斯(Service)()

参考:http://buaadallas.blog.51cto.com/399160/372090

  21. 请表明下Android程序运行时权限与文件系统权限的分别。

apk程序是运行在虚拟机上的,对应的是Android独特的权杖机制,只有显示到文件系统上时才使用linux的权力设置。

android系统部分权限是遵照签名的。

切切实实参见:http://blog.csdn.net/Zengyangtech/archive/2010/07/20/5749999.aspx

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

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

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

  24、什么是ANR 如何制止它?

  答:ANR:Application Not
Responding,五秒在Android中,活动管理器和窗口管理器这多少个体系服务承受监视应用程序的响应。当现身下列意况时,Android就会展现ANR对话框了:

  对输入事件(如按键、触摸屏事件)的响应领先5秒

  意向接受器(intentReceiver)抢先10分钟仍未执行完毕

  Android应用程序完全运转在一个独门的线程中(例如main)。这就代表,任何在主线程中运作的,需要消耗大量时间的操作都会引发ANR。因为这时候,你的应用程序已经远非机会去响应输入事件和意向广播(Intent
broadcast)。

  由此,任何运行在主线程中的方法,都要尽量的只做少量的办事。特别是运动生命周期中的首要艺术如onCreate()和
onResume()等更应如此。潜在的相比耗时的操作,如访问网络和数据库;或者是付出很大的算计,比如改变位图的深浅,需要在一个单独的子线程中成就

(或者是使用异步请求,如数据库操作)。但这并不意味你的主线程需要进入阻塞状态已等待子线程截止

也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将收尾的时候调用它(xing:可以参照Snake的例子,这种艺术与从前大家所接触的大相径庭)。使用这种方法涉及你的应用程序,可以保证你的先后对输入保持卓越的响应,从而制止因为输入事件超越5分钟不被拍卖而发生的ANR。那种实践需要采取到具有展现用户界面的线程,因为她俩都面临着相同的超时问题。

  25、什么意况会造成Force Close ?怎么样防止?能否捕获导致其的可怜?

  答:一般像空指针啊,能够看起logcat,然后对应到程序中 来解决错误

  26、Android本身的api并未讲明会抛出相当,则其在运行时有无可能抛出runtime卓殊,你赶上过呢?诺有的话会促成怎么着问题?怎样化解?

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

  答:一个activity展现了一个用户可以操作的可视化用户界面

  一个service不分包可见的用户界面,而是在后台无限地运行

  可以连续到一个正值周转的服务中,连接后,可以通过劳务中表透露来的假说与其进展通信

  一个broadcast
receiver是一个接受播放音信并作出回应的component,broadcast
receiver没有界面

  intent:content provider在接到到ContentResolver的乞请时被激活。

766游戏网官网,  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文件中声称的。

  28、IntentService有何优点?

  答:IntentService 的好处

  * Acitivity的历程,当处理Intent的时候,会时有发生一个遥相呼应的瑟维斯(Service)

  * Android的进程处理器现在会尽可能的不kill掉你

  * 卓殊容易使用

  29、横竖屏切换时候activity的生命周期?

  1、不设置Activity的android:configChanges时,切屏会重新调用各样生命周期,切横屏时会执行一遍,切竖屏时会执行两回

  2、设置Activity的android:configChanges=”orientation”时,切屏依然会再一次调用各种生命周期,切横、竖屏时只会进行两遍

  3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会再一次调用各种生命周期,只会举办onConfigurationChanged方法

  30. 什么样将SQLite数据库(dictionary.db文件)与apk文件一起发表?

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

  31. 怎么着将开辟res aw目录中的数据库文件?

  解答:在Android中不可以直接打开res
aw目录中的数据库文件,而急需在先后第一次启动时将该文件复制到手机内存或SD卡的某部目录中,然后再打开该数据库文件。复制的着力措施是行使getResources().openRawResource方法赢得res
aw目录中资源的
InputStream对象,然后将该InputStream对象中的数据写入此外的目录中相应文件中。在Android
SDK中得以动用SQLiteDatabase.openOrCreateDatabase方法来开辟任意目录中的SQLite数据库文件。

  32. Android引入广播机制的来意?

  答:a:从MVC的角度考虑(应用程序内)

 其实回答这一个题目的时候还是可以够如此问,android为啥要有这4大组件,现在的运动支付模型基本上也是照搬的web那一套MVC架构,只但是是改了点嫁妆而已。android的四大组件本质上就是为着促成移动如故说嵌入式设备上的MVC架构,它们之间有时是一种相互依存的涉及,有时候又是一种补偿关系,引入广播机制得以方便几大组件的信息和多少交互。

  b:程序间互通信息(例如在协调的应用程序内监听系统来电)

  c:效用上(参考UDP的广播协议在局域网的方便性)

  d:设计情势上(反转控制的一种接纳,类似监听者格局)

转自:http://www.cnmsdn.com/html/201101/1295431222ID9251.html

       33、android 的优势与相差

Android平台手机 5大优势:

一、开放性

在优势方面,Android平台首先就是其开发性,开发的平台允许其他活动终端厂商参与到Android联盟中来。显然的开放性能够使其拥有更多的开发者,随着用户和动用的逐级充足,一个崭新的阳台也将迅速走向成熟

开发性对于Android的腾飞而言,有利于积累人气,这里的人气席卷消费者和厂商,而对于顾客来讲,随大的获益正是丰盛的软件资源。开放的阳台也会带动更大竞争,如此一来,消费者将得以用更低的价钱购得心仪的手机。

二、挣脱运营商的羁绊

 

在过去很长的一段时间,特别是在欧美地区,手机使用往往受到运营商制约,使用什么效益衔接什么网络,几乎都受到运营商的决定。从上年黑莓上市
,用户可以更加惠及地接连网络,运营商的掣肘减弱。随着EDGE、HSDPA那一个2G至3G移动网络的日渐对接和提拔,手机随机接入网络已不是运营商口中的笑谈,当你可以透过手机IM软件方便地拓展及时聊天时,再回忆不久前些天价的彩信和图铃下载业务,是不是像梦魇一样?

互联网巨头Google推动的Android终端天生就有网络特征,将让用户离互联网更近。

三、丰裕的硬件拔取

这或多或少依旧与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功用特色各具的多种产品。效用上的距离和特征,却不会影响到多少同步、甚至软件的分外,好比你从小米Symbian风格手机 一下改用苹果 iPhone,同时还可将Symbian中非凡的软件带到索尼爱立信上应用、联系人等资料更加可以方便地变换,是不是可怜方便呢?

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

Android平台提供给第三方开发商一个特别科普、自由的环境,不会碰到各类条条框框的阻扰,综上可得,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的顺序和游玩如可控制正是留给Android难题之一。

五、无缝结合的Google应用

现今叱诧互联网的Google已经渡过10年度历史,从查找巨人到宏观的互联网渗透,Google服务如地图、邮件、搜索等早已变成连年用户和互联网的重点关键,而Android平台手机将无缝结合这几个优良的Google服务。

再说Android的5大不足:

一、安全和隐私

出于手机
与互联网的紧密联系,个人隐私很难到手保守。除了上网过程中注意或不留意留下的私家足迹,Google这些大个子也随时站在你的身后,洞穿任何,因而,互联网的尖锐将会带来新一轮的苦衷危机。

二、首先开卖Android手机的不是最流年营商

肯定,T-Mobile在23日,于U.S.A.伦敦发表了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中就从未有过放手音乐
播放器,全体依靠第三方支付,缺乏了成品的统一性。

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

XML解析首要有二种艺术,SAX、DOM、PULL。常规在PC上开发我们应用Dom相对轻松些,但有些性质敏感的数据库或手机上仍旧重点运用SAX模式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对此套嵌五个分支来说处理不是很有利。而DOM格局会把方方面面XML文件加载到内存中去,这里Android开发网提示我们该措施在搜索方面可以和XPath很好的组合假如数据量不是很大推荐使用,而PULL平日用在J2ME对于节点处理相比好,类似SAX格局,同样很节省内存,在J2ME中大家通常拔取的KXML库来分析。

详细意况请参考
http://blog.csdn.net/Android_Tutor/archive/2010/09/17/5890835.aspx

                           
http://www.linuxidc.com/Linux/2010-11/29768.htm

                          
http://littlefermat.blog.163.com/blog/static/59771167200981853037951/

35、DDMS和TraceView的区别?

DDMS是一个程序执行查看器,在其中可以望见线程和库房等消息,TraceView是程序性能分析器

36、Activity被回收了肿么办?

只有另启用了

37、java中哪些引用本地语言

可以用JNI接口

38、谈谈Android的IPC机制

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

39、NDK是什么

NDK是局部列工具的成团,

NDK提供了一多级的工具,帮忙开发者快捷的支出C/C++的动态库,并能自动将so和java
应用打成apk包。

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

40 描述一下android的系统架构

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

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

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

  applicationframework(应用软件架构),java应用程序开发人士首假使应用该层封装好的api举办高效支付。

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

  上边的四个层次,下层为上层服务,上层需要下层的支撑,调用下层的服务,这种严刻分层的章程带来的庞然大物的安居、灵活性和可增添性,使得不同层的开发人员能够遵照正规专心特定层的开支。

  android应用程序使用框架的api并在框架下运行,这就牵动了程序支付的万丈一致性,另一方面也报告我们,要想写出优质便捷的次序就非得对整体applicationframework举办特别尖锐的了解。领会applicationframework,你就可以真正的知道android的规划和运行机制,也就更可以驾驶整个应用层的开支。

发表评论

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