宁波IT培训
美国上市IT培训机构

0574-87236644

Android面试题集(一)

  • 时间:2019-01-09 14:42
  • 发布: Open软件开发小组
  • 来源:微信公众号

手画一下Android系统架构图,描述一下各个层次的作用?

Android系统架构图




从上到下依次分为四层:

  • Android应用框架层

  • Java系统框架层

  • C++系统框架层

  • Linux内核层

Activity如与Service通信?

可以通过bindService的方式,先在Activity里实现一个ServiceConnection接口,并将该接口传递给bindService()方法,在ServiceConnection接口的onServiceConnected()方法 里执行相关操作。

Service的生命周期与启动方法由什么区别?

  • startService():开启Service,调用者退出后Service仍然存在。

  • bindService():开启Service,调用者退出后Service也随即退出。

Service生命周期:

  • 只是用startService()启动服务:onCreate() -> onStartCommand() -> onDestory

  • 只是用bindService()绑定服务:onCreate() -> onBind() -> onUnBind() -> onDestory

  • 同时使用startService()启动服务与bindService()绑定服务:onCreate() -> onStartCommnad() -> onBind() -> onUnBind() -> onDestory

Service先start再bind如何关闭service,为什么bindService可以跟Activity生命周期联动?

广播分为哪几种,应用场景是什么?

  • 普通广播:调用sendBroadcast()发送,最常用的广播。

  • 有序广播:调用sendOrderedBroadcast(),发出去的广播会被广播接受者按照顺序接收,广播接收者按照Priority属性值从大-小排序,Priority属性相同者,动态注册的广播优先,广播接收者还可以 选择对广播进行截断和修改。

广播的两种注册方式有什么区别?

  • 静态注册:常驻系统,不受组件生命周期影响,即便应用退出,广播还是可以被接收,耗电、占内存。

  • 动态注册:非常驻,跟随组件的生命变化,组件结束,广播结束。在组件结束前,需要先移除广播,否则容易造成内存泄漏。

广播发送和接收的原理了解吗?

  1. 继承BroadcastReceiver,重写onReceive()方法。

  2. 通过Binder机制向ActivityManagerService注册广播。

  3. 通过Binder机制向ActivityMangerService发送广播。

  4. ActivityManagerService查找符合相应条件的广播(IntentFilter/Permission)的BroadcastReceiver,将广播发送到BroadcastReceiver所在的消息队列中。

  5. BroadcastReceiver所在消息队列拿到此广播后,回调它的onReceive()方法。

广播传输的数据是否有限制,是多少,为什么要限制?

ContentProvider、ContentResolver与ContentObserver之间的关系是什么?

  • ContentProvider:管理数据,提供数据的增删改查操作,数据源可以是数据库、文件、XML、网络等,ContentProvider为这些数据的访问提供了统一的接口,可以用来做进程间数据共享。

  • ContentResolver:ContentResolver可以不同URI操作不同的ContentProvider中的数据,外部进程可以通过ContentResolver与ContentProvider进行交互。

  • ContentObserver:观察ContentProvider中的数据变化,并将变化通知给外界。

遇到过哪些关于Fragment的问题,如何处理的?

  • getActivity()空指针:这种情况一般发生在在异步任务里调用getActivity(),而Fragment已经onDetach(),此时就会有空指针,解决方案是在Fragment里使用 一个全局变量mActivity,在onAttach()方法里赋值,这样可能会引起内存泄漏,但是异步任务没有停止的情况下本身就已经可能内存泄漏,相比直接crash,这种方式 显得更妥当一些。

  • Fragment视图重叠:在类onCreate()的方法加载Fragment,并且没有判断saveInstanceState==null或if(findFragmentByTag(mFragmentTag) == null),导致重复加载了同一个Fragment导致重叠。(PS:replace情况下,如果没有加入回退栈,则不判断也不会造成重叠,但建议还是统一判断下)

@Override protected void onCreate(@Nullable Bundle savedInstanceState) {// 在页面重
启时,Fragment会被保存恢复,而此时再加载Fragment会重复加载,导致重叠 ; if(saveInstan
ceState == null){ // 或者 if(findFragmentByTag(mFragmentTag) == null) // 正常情况下
去 加载根Fragment  } 
}

以上只是面试题的一小部分,今天就先介绍到这里,如果你们有兴趣了解Android开发的相关内容,可以填写下方的表单,有利于咨询老师更快的找到你哦!我们下次见~


文章转载于郭孝星 Open软件开发小组


预约申请免费试听课

怕钱不够?就业挣钱后再付学费!    怕学不会?从入学起,达内定制课程!     担心就业?达内多家实践企业供你挑选!

上一篇:程序员需要学习的4种编程语言
下一篇:Android面试题集(二)

2020年Web前端面试问题总结之JS问题

2020年Web前端面试问题总结之VUE问题

2020年Web前端面试问题总结之React问题

2020年Web前端笔试题汇总

选择城市和中心
江西省

贵州省

广西省

海南省