面试题

什么是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。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时问题。 
2.什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?
一般像空指针啊,可以看起logcat,然后对应到程序中 来解决错误
3、Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?


4、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver
一个activity呈现了一个用户可以操作的可视化用户界面
一个service不包含可见的用户界面,而是在后台无限地运行
可以连接到一个正在运行的服务中,连接后,可以通过服务中暴露出来的借口与其进行通信
一个broadcast receiver是一个接收广播消息并作出回应的component,broadcast receiver没有界面
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文件中声明的。

5、IntentService有何优点?
其实它也是避免ANR的方法:
IntentService 的好处

  * Acitivity的进程,当处理Intent的时候,会产生一个对应的Service
  * Android的进程处理器现在会尽可能的不kill掉你
  * 非常容易使用
1. View的刷新:
在需要刷新的地方,使用handle.sendmessage发送信息,然后在handle的getmessage里面执行invaliate或者postinvaliate.
2. GC内存泄露
出现情况:
1.数据库的cursor没有关闭
2.构造adapter时,没有使用缓存contentview
   衍生listview的优化问题-----减少创建view的对象,充分使用contentview,可以使用一静态类来优化处理getview的过程/
3.Bitmap对象不使用时采用recycle()释放内存
4.activity中的对象的生命周期大于activity
调试方法: DDMS==> HEAPSZIE==>dataobject==>[Total Size]
还有其他问题,大家欢迎提出阿,可以是整体架构的,还有这个Hal层.


1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念
DVM 执行时,在linux看来就是一应用程序进程,所以说是同一概念

2. sim卡的EF 文件有何作用
sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统,EF就是作存储并和手机通讯用的

4.嵌入式操作系统内存管理有哪几种, 各有何特性
页式,段式,段页,用到了MMU,虚拟空间等技术

5. 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗?
分 硬实时和软实时,android属于linux内核,linux在用户空间可抢占,内核空间在2.4以后可局部抢占,严格来讲 Android属于软实时系统

6. 一条最长的短信息约占多少byte?
一条短信可以输入

中文70(包括标点)英文160个字节


Android面试题

1.    请描述下Activity的生命周期。
2.    如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?
3.    如何将一个Activity设置成窗口的样式。(Edited by Sodino)
4.    如何退出Activity?如何安全退出已调用多个Activity的Application?
5.    请介绍下Android中常用的五种布局。

最常用的布局方式为LinearLayout、RelativeLayout、FrameLayout、TableLayout AbsoluteLayout。其中LinearLayout和RelativeLayout是最常用的方式,他们可以通过在xml配置文件或者代码中进行布局。

FrameLayout 最简单的布局方式,放置的控件都只能罗列到左上角,控件会有重叠,不能进行复杂的布局。
LinearLayou可以通过orientation属性设置线性排列的方向是垂直(vertical)还是纵向(horizontal).每行或每列只有一个元素,可以进行复杂的布局。
AbsoluteLayout 可以让子元素指定准确的x/y坐标值,并显示在屏幕上。AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。他是绝对坐标,所以在实际中不提倡使用。
RelativeLayout 允许子元素指定他们相对于其它元素或父元素的位置(通过ID 指定)。因此,你可以以右对齐,或上下,或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。这个是相对于 AbsoluteLayout 的,采用的相对坐标,所以在实际中比较常用。
TableLayout 将子元素的位置分配到行或列中。一个TableLayout 由许多的TableRow 组成,每个TableRow 都会定义一个 row 。TableLayout 容器不会显示row 、column或cell 的边框线。每个 row 拥有0个或多个的cell ;和html中的table差不多。在实际中也经常使用。
    有的时候我们也会用到GridView,就像我们手机屏幕上摆放的各个图标应该就是用GridView排版的。 Padding是文字相对于边框,而Margin是边框相对于父窗体。


6.    请介绍下Android的数据存储方式。(Edited by Sodino)
7.    请介绍下ContentProvider是如何实现数据共享的。(Edited by Sodino)
8.    如何启用Service,如何停用Service。(Edited by Sodino)
9.    注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。
10.    请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系。
11.    AIDL的全称是什么?如何工作?能处理哪些类型的数据?
12.    请解释下Android程序运行时权限与文件系统权限的区别。(Edited by Sodino)
13.    系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。
14.    有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。
15.    你如何评价Android系统?优缺点。

你可能感兴趣的:(android,应用服务器,linux,面试,嵌入式)