2018-06-07

1、Android中的四大组件及其作用

2、Service与Thread的区别

Service与Thread两个完全不一样的东西
Service
Service是Android四大组件之一,被用来执行长时间的后台任务。
在默认情况下,Service是运行在主线程中,如果需要执行耗时任务,需要在Service中创建线程。
Service的优先级高于后台挂起的Activity,也高于在Activity中创建的线程,不容易被杀死,即使被杀死,在资源可用的情况下也还会被重启。
Thread
Thread跟Service根本不是一个级别的东西,Thread只是用来创建线程的一个工具类

3、PendingIntent与Intent的区别

PendingIntent跟字面意思一样,是悬而未决的,需要在一定的条件下才会触发,PendingIntent.getActivity用于获取启动Activity的PendingIntent, PendingIntent.getService用于获取启动Service的PendingIntent,PendingIntent.getBroadcast用户获取启动广播的PendingIntetn。一般用户通知栏、闹钟、发送短信通知等
而Intent是立即执行的


a. Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel
b. Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效
c. PendingIntent自带Context,而Intent需要在某个Context内运行
d. Intent在原task中运行,PendingIntent在新的task中运行

4、Binder机制

5、Handler、Looper、Message工作方式,如何在线程中使用Handler.主线程使用Handler使用Looper.loop()为什么不会ANR.

HandlerThread.

6、Activity四种启动模式及使用场景

standard、singleTop、singleTask、singleInstance
standard: 默认,每次启动都会新建一个实例
singleTop: 如果栈顶不是该实例,则新建,如果栈顶为该实例,则复用。
singleTask: 只会有一个实例,栈中如果无实例,则新建,否则移除实例上的其他对象。
singleInstance: 不管如何,都会新建一个栈,且该栈中只有这一个实例。

7、Service启动方式区别

startService: 启动之后就独立运行,跟启动者没有关联,初次启动执行onCreate,onStartCommand(onStart)已过期,后续启动只执行onStartCommand.当调用stopSelf或调用stopService之后,Service停止运行。
bindService:启动之后与启动着绑定,获得IBinder对象,调用Service中的方法。启动者退出生命周期后需要主动调用unbindService解绑,否则会造成内存泄漏。

8、Android适配、6.0动态权限分配

9、Service服务如何得知连接断开

10、Broadcast注册方式与区别以及使用场景,有序广播和无序广播的区别

静态注册和动态注册
静态注册是在mainfest中注册,在应用停止后也能够接收广播。
动态注册是在代码中使用Context.registerBroadcast注册,退出应用后收不到广播。

11、HttpClient与HttpUrlConnection的区别

HttpClient已被Google废弃,2.3之后使用HttpUrlConnection.
HttpClient提供的接口多,但是不易于扩展
HttpUrlConnection压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用

12、HTTPS域HTTP的区别

Https是在Http应用层的基础上使用安全套接字作为子层,也就是=http + SSL
Http是以http开头,而Https以https开头
http是不安全的,而https是安全的。
http对传输数据不加密,而https对数据加密
http无需证书,而https需要证书
在OSI网络模型中,http工作在应用层,而https工作在传输层。

13、UDP/HTTP/TCP/IP协议,ISO分层,三次握手,四次挥手

TCP是一种面向连接的,可靠的,基于字节流的传输控制协议。保证数据通信的完整性和可靠性,防止丢包。
IP是英特网互联协议。路由器就是基于IP协议的,解决了多个局域网之间的互通。
TCP/IP分层,应用层->传输层->网络层->物理层
三次握手:开始发送数据,确认双方发送接收都正常。
四次挥手:结束数据发送的时候。确认双方都结束。

14、排序算法

15、进程保活与进程优先级

黑色保活:不同的app进程,用广播相互唤醒(包括利用系统提供的广播进行唤醒)
白色保活:启动前台Service
灰色保活:利用系统的漏洞启动前台Service

16、加载大图

使用BitmapRegionDecoder.decodeRegion方法来加载大图中间的部分,

17、三级缓存

内存缓存(LruCache)、本地缓存(DiskLruCache)、网络缓存

18、MVC框架、MVP框架、MVVM框架

MVC允许View和Model进行交互。MVP模式只允许View和Presenter、Presenter和Model交互,不允许View和Model直接交互。
MVP优点:
1、分离了视图逻辑和业务逻辑,降低了耦合,代码更加简洁。
2、Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试。
3、易于扩展与维护
MVP缺点:
1、接口与类的数量变多。
2、一定层度上降低了性能。
MVVM:数据双向绑定

19、讲解一下Context

Context有众多的实现类,其中主要的有Activity、Application、Service三类。
跟UI相关的操作(启动一个Activity、Layout Inflation、Show a Dialog)应用尽量使用Activity。

20、Dalvik虚拟机与Java虚拟机的区别

Java虚拟机使用java字节码,而Dalvik使用Dalvik字节码。Dalvik由Java字节码转换而来,并打包成Dex可执行文件。
Dex可执行文件体积更小
Java虚拟机基于栈架构。而Dalvik虚拟机基于寄存器架构,速度更快。

21、JNI

22、Android的事件传递机制
答:当手指在屏幕上按下的时候,触发ACTION_DOWN事件,事件首先会调用Activity的dispatchTouchEvent()方法去分配触摸事件,Activity实际上会调用PhoneWindow.superDispatchTouchEvent()方法,PhoneWindow实际上只是调用代理对象DecorView#dispatchTouchEvent()的方法,DecorView实际上是一个ViewGroup.dispatchTouchEvent()方法中,会先去判断disallowIntercept变量的值(这个值可以由requestDisallowInterceptTouchEvent()来变更),这个值表示是否禁用掉事件拦截功能,如果为true,就将事件分配给子控件,调用子控件的dispatchTouchEvent()方法,如果为false,要先调用onInterceptTouchEvent()方法来判断是否拦截事件,如果返回true,表示拦截事件,则事件直接传给super.dispatchTouchEvent(),也就是View里面的事件分发,这个等下会讲到。如果返回false,则不进行拦截事件,就将事件分发给子控件,如果子控件中有一个dispatchTouchEvent()方法返回了true,则事件分发流程结束。否则就调用自己的super.dispatchTouchEvent()。那么子控件是如何进行事件分配呢?首先如果子控件是ViewGroup,那么分配方式跟刚才的DecorView一致,一层层分发下去,如果子控件是View类型的,那就是调用View.dispatchTouchEvent()方法。在这个方法中,如果有给View设置了onTouchListener并且View是Enable的时候,会先回调onTouchListener中的onTouch方法,如果这个方法返回了true,就直接结束事件分发了。否则会调用onTouchEvent()方法,在这个方法中,回去判断单击(performClick),长按(performLongClick)等方法。也就是设置了onClickListener,onLongClickListener等监听器。如果这里返回了false,那么后续的事件就不会再进入了。这样一个事件流程就结束了。

23、onSaveInstanceState()

24、性能优化

答:主要由几个方面去优化性能:
一、合理的管理内存
1、降低内存消耗: 枚举的消耗是静态常量的两倍以上,所以可以尽可能的使用静态常量来代替枚举。使用系统优化过的数据集合,比如SparseArray,在优化性能上同时减小了key的内存消耗。另外在Bitmap的问题上,加载的时候尽量不要加载多余的分辨率,可以在BitmapFactory decode图片的时候使用options.inSampleSize去压缩图片。
2、内存释放:
3、内存泄漏:
4、避免频繁创建

25、Android绘制流程

image.png

Activity调用setContentView之后,Activity调用PhoneWindow,PhoneWindow以DecorView作为根传入>LayoutInflater.最后会调用DecorView中ViewRoot的requestLayout方法开始绘制,该方法中会调用>scheduleTraversals方法,该方法最终会调用ViewRootImpl的performTraversales()。这个方法中会调
用performMeasure,performLayout,performDraw
measure: 判断是否需要重新计算View的大小,需要的话则计算;
layout: 判断是否需要重新计算View的位置,需要的话则计算;
draw: 判断是否需要重新绘制View,需要的话则重绘制。
26、Activity生命周期

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容