Android基础知识总结(三)

21.ANR(Application Not Responding)  

扩展文链接:深入理解ANR - 简书

Android应用程序有一段时间响应不够灵敏,系统会向用户显示应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现ANR,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。

原因:主线程做耗时操作;主线程被其他线程锁;CPU被其他进程占用,该进程没有分配CPU资源;OnReceiver过多操作,IO操作,如数据库、文件、网络

22.自定义View 

扩展文链接:Android自定义View全解 - 简书

自定义组合控件  多个控件组合成为一个新的控件,方便多处复用

继承系统View控件  继承自TextView等系统控件,在系统控件的基础功能上进行扩展

继承View  不复用系统控件逻辑,继承View进行功能定义

继承系统ViewGroup  继承自LinearLayout等系统控件,在系统控件的基础功能上进行扩展

继承ViewViewGroup  不复用系统控件逻辑,继承ViewGroup进行功能定义

 View绘制流程基本由measure()、layout()、draw()这个三个函数完成

函数作用相关方法

measure()测量View的宽高measure(),setMeasuredDimension(),onMeasure()

layout()计算当前View以及子View的位置layout(),onLayout(),setFrame()

draw()视图的绘制工作draw(),onDraw()

自定义View的注意事项   参考文章:Android自定义View注意事项 - 简书

①需要在onMeasure方法中处理wrap_content的方法,让View支持wrap_content;

②避免padding和子元素的margin失效,让View支持padding;

③尽量不要在View中使用Handler,View中已提供了post系列方法,可替代Handler作用;

④避免造成内存泄漏,View中如果有线程或者动画,需要及时停止。

23.MVC、MVP、MVVM三种架构设计 

扩展文链接:Android高精战争(MVC、MVP、MVVM) - lihaoxiang123的博客 - CSDN博客

MVC全名是Model View Controller,如图,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

MVP从更早的MVC框架演变过来,与MVC有一定的相似性:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

MVP框架由3部分组成:View负责显示,Presenter负责逻辑处理,Model提供数据。在MVP模式里通常包含3个要素(加上View interface是4个):

View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity)

Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合)

Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。

View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试

MVC 与MVP的区别

(最主要区别)View与Model并不直接交互,而是通过与Presenter交互来与Model间接交互。而在MVC中View可以与Model直接交互

通常View与Presenter是一对一的,但复杂的View可能绑定多个Presenter来处理逻辑。而Controller是基于行为的,并且可以被多个View共享,Controller可以负责决定显示哪个View

Presenter与View的交互是通过接口来进行的,更有利于添加单元测试。

在MVP中,Activity的代码不臃肿;

在MVP中,Model(IUserModel的实现类)的改动不会影响Activity(View),两者也互不干涉,而在MVC中会;

在MVP中,IUserView这个接口可以实现方便地对Presenter的测试;

在MVP中,UserPresenter可以用于多个视图,但是在MVC中的Activity就不行。

MVVM可以算是MVP的升级版,其中的VM是ViewModel的缩写,ViewModel可以理解成是View的数据模型和Presenter的合体,ViewModel和View之间的交互通过Data Binding完成,而Data Binding可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低,关注点分离更为彻底,同时减轻了Activity的压力。

24.APP 启动流程

点击桌面图标,launcher进程启动主Activity以Binder方式发送给AMS服务,交付给ActivityManagerService处理Intent和flag信息,通过prepareMainLooper()方法loop处理消息

25.插件化

解除代码耦合,插件支持热插拔,静默升级,从根本上解决65k属性和方法的bug,进行自定义classLoader。

插件化和热修复都是动态加载技术,使用场景不同,热修复为解决线上问题或者小功能更新,插件化解决应用上的大问题。

组件化:为了解耦,把复杂系统拆分成多个组件,分离组件边界和责任,便于独立升级和维护。

26.Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。Kotlin已正式成为Android官方支持开发语言。

React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。 flutter。

27.Framework 工作原理

Android 系统对Linux、kernel、lib库等封装,提供WMS、AMS、binder机制,handler-message机制等方式,供APP使用。Framework 就是提供APP生存环境。

28.Android 屏幕适配

各种dp文件,使用各种尺寸屏幕

布局文件中view设置高宽时不限定大小,尽量使用wrap_content,match_parent;代码中设置高宽前可获取屏幕大小,如果是线性布局可设置view在LinearLayout的weight;单位dp适配屏幕,单位sp适用字体,多图片,多布局。

29.事件分发机制

dispatchTouchEvent() 负责事件分发。当点击事件产生后,事件首先传递给当前Activity,调用Activity的dispatchTouchEvent()方法,返回值为true则表示View或子View消费了此事件,如果返回true,则表示没有消费事件,并调用父View的onTouchEvent方法。

onTouchEvent()用于处理事件,返回值决定当前控件是否消费了这个事件,也就是说在当前控件在调用父View的onTouchEvent方法完Touch事件后,是否还允许Touch事件继续向上(父控件)传递,一但返回True,则父控件不用操心自己来处理Touch事件。返回true,则向上传递给父控件。

onInterceptTouchEvent() ViewGroup的一个方法,用于处理事件(类似于预处理,当然也可以不处理)并改变事件的传递方向,也就是决定是否允许Touch事件继续向下(子控件)传递,一但返回True(代表事件在当前的viewGroup中会被处理),则向下传递之路被截断(所有子控件将没有机会参与Touch事件),同时把事件传递给当前的控件的onTouchEvent()处理;返回false,则把事件交给子控件的onInterceptTouchEvent()。

事件分发机制原理图

当一个Touch事件(触摸事件为例)到达根节点,即Acitivty的ViewGroup时,它会依次下发,下发的过程是调用子View(ViewGroup)的dispatchTouchEvent方法实现的。简单来说,就是ViewGroup遍历它包含着的子View,调用每个View的dispatchTouchEvent方法,而当子View为ViewGroup时,又会通过调用ViwGroup的dispatchTouchEvent方法继续调用其内部的View的dispatchTouchEvent方法。上述例子中的消息下发顺序是这样的:①-②-⑤-⑥-⑦-③-④。dispatchTouchEvent方法只负责事件的分发,它拥有boolean类型的返回值,当返回为true时,顺序下发会中断。

小结:onInterceptTouchEvent()默认返回false,不做截获。返回true之后,事件流的后端控件就没有机会处理touch事件。view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理,如果onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。

30.Android 动画分类:视图,属性,帧,gif。


上一篇:Android基础知识总结(二)

下一篇:Android基础知识总结(四)

每天进步一点点。。。(2019-05-09 )

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

推荐阅读更多精彩内容