宁波IT培训
美国上市IT培训机构
0574-87236644
Android系统架构图
从上到下依次分为四层:
Android应用框架层
Java系统框架层
C++系统框架层
Linux内核层
可以通过bindService的方式,先在Activity里实现一个ServiceConnection接口,并将该接口传递给bindService()方法,在ServiceConnection接口的onServiceConnected()方法 里执行相关操作。
startService():开启Service,调用者退出后Service仍然存在。
bindService():开启Service,调用者退出后Service也随即退出。
Service生命周期:
只是用startService()启动服务:onCreate() -> onStartCommand() -> onDestory
只是用bindService()绑定服务:onCreate() -> onBind() -> onUnBind() -> onDestory
同时使用startService()启动服务与bindService()绑定服务:onCreate() -> onStartCommnad() -> onBind() -> onUnBind() -> onDestory
普通广播:调用sendBroadcast()发送,最常用的广播。
有序广播:调用sendOrderedBroadcast(),发出去的广播会被广播接受者按照顺序接收,广播接收者按照Priority属性值从大-小排序,Priority属性相同者,动态注册的广播优先,广播接收者还可以 选择对广播进行截断和修改。
静态注册:常驻系统,不受组件生命周期影响,即便应用退出,广播还是可以被接收,耗电、占内存。
动态注册:非常驻,跟随组件的生命变化,组件结束,广播结束。在组件结束前,需要先移除广播,否则容易造成内存泄漏。
继承BroadcastReceiver,重写onReceive()方法。
通过Binder机制向ActivityManagerService注册广播。
通过Binder机制向ActivityMangerService发送广播。
ActivityManagerService查找符合相应条件的广播(IntentFilter/Permission)的BroadcastReceiver,将广播发送到BroadcastReceiver所在的消息队列中。
BroadcastReceiver所在消息队列拿到此广播后,回调它的onReceive()方法。
ContentProvider:管理数据,提供数据的增删改查操作,数据源可以是数据库、文件、XML、网络等,ContentProvider为这些数据的访问提供了统一的接口,可以用来做进程间数据共享。
ContentResolver:ContentResolver可以不同URI操作不同的ContentProvider中的数据,外部进程可以通过ContentResolver与ContentProvider进行交互。
ContentObserver:观察ContentProvider中的数据变化,并将变化通知给外界。
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开发的相关内容,可以填写下方的表单,有利于咨询老师更快的找到你哦!我们下次见~
文章转载于