【转载】2015Android 面试题 01

1.如何避免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. 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。

  3. Android引入广播机制的用意?

  答:

  a:从MVC的角度考虑(应用程序内) 其实回答这个问题的时候还可以这样问,android为什么要有那4大组件,现在的移动开发模型基本上也是照搬的web那一套MVC架构,只不过是改了点嫁妆而已。

  android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制可以方便几大组件的信息和数据交互。   

  b:程序间互通消息(例如在自己的应用程序内监听系统来电)   

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

  d:设计模式上(反转控制的一种应用,类似监听者模式)

  4.什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?

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

 

 5.如何将一个Activity设置成窗口的样式。

  讲点轻松的吧,可能有人希望做出来的应用程序是一个漂浮在手机主界面的东西,那么很简单你只需要设置 一下Activity的主题就可以了在AndroidManifest.xml 中定义 Activity的地方一句话:  

 Xml代码 1. android :theme="@android:style/Theme.Dialog"    

    这就使你的应用程序变成对话框的形式弹出来了,

  或者Xml代码   1. 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 ,(‘_‘换成‘.‘ < --注意:这个是文章内容不是笑脸)

  就可以用在描述文件 中了,找找类定义和描述文件中的对应关系就都明白了。

  (简单来说直接在配置文件引入风格。追求效果的应用此用法用到挺多);

  6、IntentService有何优点?

  Acitivity的进程,当处理Intent的时候,会产生一个对应的Service Android的进程处理器现在会尽可能的不kill掉你 非常容易使用

  (这回答其实比较。。。其实我也不知道干嘛使,因为看帮助文档就说了一个用来处理异步请求的service,工作完了自己停止。没用过,不做评价)。

  7、 广播的生命周期?

  广播的生命周期非常短,当发送之后intent会到AndroidManifest.xml方法中找是不是匹配的action,如果有就调用Receiver,然后获得Receiver对象,再执行onReceiver方法,这时候Receiver对象就没有用了,

  当我们再次点击按钮的时候就会重新获得对象,这就是BroadcastReceiver的生命周期。

  在BroadcastReceiver里不能做一些比较耗时的操作,否则会弹出ANR(Application No Response)的对话框。

  如果需要完成一项耗时的工作,应该通过发送Intent给Service,由Service来完成。这里不能使用子线程来解决,因为BroadcastReceiver的生命周期很短,子线程可能还没有结束,BroadcastReceiver就先结束了。BroadcastReceiver一旦结束,此时BroadcastReceiver的所在线程很容易在系统需要内存时被优先杀死,因为它属于空进程(没有任何活动组件的进程)。如果它的宿主进程被杀死,那么正在工作的子线程也会被杀死,所以采用子线程来解决是不可靠的。

  8、启动service的两种方法?有什么区别?

  一种是startService(),另一种是bindService()。

  这两者的区别是第一种方式调用者开启了服务,即会与服务失去联系,两者没有关联。即使访问者退出了,服务仍在运行。如需解除服务必须显式的调用stopService方法。

  主要用于调用者与服务没有交互的情况下,也就是调用者不需要获取服务里的业务方法。比如电话录音。

  而后者调用者与服务绑定在一起的。当调用者退出的时候,服务也随之退出。用于需要与服务交互。

时间: 2024-10-10 06:02:52

【转载】2015Android 面试题 01的相关文章

[转载]AngularJS入门教程01:静态模板

为了说明angularJS如何增强了标准HTML,我们先将创建一个静态HTML页面模板,然后把这个静态HTML页面模板转换成能动态显示的AngularJS模板. 在本步骤中,我们往HTML页面中添加两个手机的基本信息,用以下命令将工作目录重置到步骤1. git checkout -f step-1 请编辑app/index.html文件,将下面的代码添加到index.html文件中,然后运行该应用查看效果. app/index.html <ul> <li> <span>

Oracle 笔试题01

数据库:Oracle数据库select面试笔试经典题目 2013-12-13 11:21:55 分类: Oracle number(10):存10位数字,即1234567890 number(10,3):123456.789 varchar2(20):最大存放20个字节的字符,其中每个字符占2个字节,如存入字符串'abc',则实际只占用6个字节空间. null不能用==或者!=比较 ,必须用 is null 或者is not null rownum 返回当前号 rowid是一个伪列,一般情况用不

[转载]iOS面试题总

转载自:http://blog.sina.com.cn/s/blog_67eb608b0101r6xb.html (2014-06-13 20:23:33) 转载▼ 标签: 转载   crash 原文地址:iOS面试题总作者:唯一的弟子 1.简述OC中内存管理机制.与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonato

转载c++面试题

转载地点:http://www.cnblogs.com/LUO77/p/5771237.html  1. 结构体和共同体的区别. 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型. 共同体union:使几个不同类型的变量共同占用一段内存. 地址: struct和union都有内存对齐,结构体的内存布局依赖于CPU.操作系统.编译器及编译时的对齐选项. 关于内存对齐,先让我们看四个重要的基本概念: 1.数据类型自身的对齐值: 对于char型数据,其自身对齐值为1,对于shor

java面试题01

一.JAVA基础 1.简述你所知道的JAVA修饰符及各自的使用机制?(public.abstract.final.synchronized.super-) 01.public:允许所有客户访问 02.protected:只能在本包,本类以及该类的子类中使用 03.private:只允许在本类中使用 04.abstract:没有提供实现,需要子类提供实现. 05.static:与整个类相关,与单个对象无关. 06.final:final修饰的类,不能被继承 final修饰的方法,不能被重写 fin

安卓开发入门与面试题01(潭州安卓开发入门教程)

今天老师讲到安卓的就业市场,说的我都想去面试了,想看看市面上咱们到底可以拿到什么样的工资,做什么样的行业.说来惭愧,我还只是一个安卓开发的新手,今天就和大家一样,开始我的安卓开发梦想启航.这个是潭州安卓开发入门教程里面最基础的. 从来以为学习安卓的都是为了兴趣,原来还可以为了就业,可是好难,就像咱们Android开发入门视频教程QQ群:175229978里面很多人一样,连面试题是哪一些都不懂,不过今天我分享到群里了,也希望在这里可以帮助更多安卓开发入门的小伙伴们. 1.什么是Activity?

面试题01

面试题1:下面代码的输出结果是什么,请解释. def extend_list(val, list=[]): list.append(val) return list list1 = extend_list(10) list2 = extend_list(123, []) list3 = extend_list('a') print(list1) print(list2) print(list3) 输出结果: [10, 'a'][123][10, 'a'] 解释: (1)通过 print(id(l

【程序员面试金典】面试题 01.03. URL化

题目 URL化.编写一种方法,将字符串中的空格全部替换为%20.假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的"真实"长度.(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作.) 示例1: 输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith" 示例2: 输入:" ", 5 输出:"%20%20%20%20%20" 提示: 字符串长度在[0,

iOS面试题01

1.#import和#include.@class有什么区别?#import<>和#import“”又有什么区别? 答:1.#import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次: [email protected]仅仅是声明一个类名,并不会包含类的完整声明:@class还能解决循环包含的问题: 3.#import<>用来包含系统自带的文件,#import“”用来包含自定义的文件. 2.属性readwrite.readonly.ass