Android面试宝典(1)----android的基础知识
慕课课程 --BAT大咖助力 全面升级Android面试】总结
1.activity
1)activity的4种状态
running/paused/stopped/killed
2)activity的生命周期
3)进程优先级
前台/可见/服务/后台/空
2.activity启动模式
1)standard重新创建activity加到任务栈中
2)singletop(栈顶复用模式)
栈顶的activity复用,其他的重新创建。
3)singletask
检测任务栈中是否存在该activity,存在则将所有该acivity以上的activity都除去
4)singleInstance
比较少使用,任务栈中只有一个实例,activity独享任务栈
3.scheme跳转协议
4.Fragment
1)Fragment为什么被称为第5大组件
使用多,Fragment可以灵活动态的加载到app中,有自己的生命周期。Fragment的生命周期不是完全独立的,必需嵌入activity中。
2)Fragment加载到activity的两种模式 a)静态,写到xml中 b)动态,实例化->add->commit
3)FragmentPagerAdpter与FragmentStatePagerAdapter的区别 FragmentPagerAdpter适用于页面较少,FragmentStatePagerAdapter适用于页面较多(destroyItem中释放了内存)。
4)Fragment生命周期
5)Fragment通信
a)在fragment中调用acitivity的方法
getActivity()
b)在activity中调用fragment的方法
接口回调(在fragment中创建接口,在activity中实现)
c)在Fragment中调用Fragment的方法
findFragmentById()
6)Fragment的replace,add,remove方法
replace是将最上层的替换,add是直接加到最上层。
5.service
1)service是什么?和Thread的区别?
是一种可以在后台执行长时间运行操作(不可执行耗时操作)而没有用户界面的应用组件。
thread是程序的最小单元,thread的运行是独立的,可以耗时操作,而service是运行在主线程中。
2)service启动方式
a)startservice
定义一个service->注册->startservice->stopservice
b)bindservice
创建bindservice服务端,继承自service并在类中,常见一个Binder接口实例对象并提供方法给客户端调用
从onBind()回调方法中返回此Binder实例
在客户端中,从onServiceConnected()回调方法接收Binder,并使用提供方法调用绑定服务。
replace是将最上层的替换,add是直接加到最上层。
6.broadcast
1)广播应用场景
同一app具有多个进程的不同组件之间的消息通信
不同的app之间的组件之间消息通信
2)广播的分类
普通广播/系统广播(有序广播)/本地广播(自身app内传播)
3)内部实现机制
a)自定义广播接受者,并复写onRecvice
b)通过Binder机制向AMS(activity manager service)进行注册
c)广播发送者通过Binder机制向AMS发送广播
d)AMS查找符合相应条件(IntentFliter/Permission等)的广播接收者,将广播发送到广播接受者相应的消息循环队列中
e)消息循环执行拿到广播,回调onReceive()方法
4)LocalBroadcastManager
a)使用它发生的广播将只在自身APP内传播,因此不用担心数据泄漏
b)比系统的全局广播更加高效
c)其他APP无法对你的app发送该广播,因此不必担心安全漏洞。
7.Webview安全漏洞
1)webview常见问题
a)远程攻击者可使用java Reflection API利用漏洞执行java对象方法
b)webview在布局文件中的使用:webview写在其他容器中时
c)jsbridge
d)webviewClient.onPageFinished->webChormeClient.onProgressChanged
e)后台耗电
f)webview硬件加速导致页面渲染问题
2)关于webview内存泄漏问题
a)独立进程,简单暴力,不过可能涉及到进程间通信
b)动态添加webview,对传入的webview使用的context进行弱引用
7.binder
1)Binder通信机制
Binder是指一种通信机制(跨进程)
性能:比传统的socket更安全,高效
客户端进程只不过持有一个代理对象引用,通过代理对象执行完成
2)aidl