【学习资料】android面试题之二
发布时间:2015年07月10日 14:15分 来源:博为峰教育网采编 关键词:Android面试题 | 上一篇 | 下一篇 |
八、如何启用Service ,如何停用Service
启动方式有两种:startService(),bindService().它们都是Context的方法。
区别:使用startService()方法启用服务,调用者与服务之间没有关连, 即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止.
停用:采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务。 采用bindService()方法启动的服务,调用者和服务绑定在了一起。若调用者退出,系统会调用onUnbind()方法解除绑定,然后调用onDestroy()方法。当然,开发者也可以自己调用Context.unbindService()方法手动解除绑定。接着,系统也会调用服务的onUnbind()-->onDestroy()方法。
九、注册广播有几种方式,这些方式有何优缺点?
注册方式有两种:一是在代码中动态注册:registerReceiver(receiver,filter); 二是在AndroidManifest中配置。
区别:
1)第一种不是常驻型广播,也就是说广播跟随程序的生命周期。
2)第二种是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。
注:当需要通过广播更新UI时,一般采用动态注册的方式,启动Activity时候注册BroadcastReceiver,Activity不可见时候,取消注册。
在AndroidManifest配置还有一个缺点:由于它一直处于活动状态,cpu和电源资源耗费比较大。
十、什么是ANR 如何避免它?
ANR:Application Not Responding。
产生原因:在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应,当用户的操作在5s内应用程序没能做出反应,BroadcastReceiver在10秒内没有执行完毕,就会出现应用程序无响应对话框,这就是ANR。
解决方式:Activity应该在它的关键生命周期方法里尽可能少的去做创建操作、潜在的耗时操作(网络或数据库操作等),或者高耗时的计算操作(改变位图尺寸等),而应该在子线程里(或者异步方式)来完成。主线程应该为子线程提供一个Handler,以便子线程完成时能够提交给主线程。
想要获得更全的Android软件开发工程师面试题请点击“Android开发工程师面试题汇总 ”。