Android-MVP模式详解,全网疯传_android中mvp模式使用详解-程序员宅基地

技术标签: 程序员  面试  android  移动开发  

缘起

随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,还有65535,应用之间的互相调用等等问题,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。

所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。

阿里P8大佬每天熬夜到凌晨一两点,花了将近半个月时间将Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架整合成了一套系统知识笔记PDF,长达1042页!相信看完这份文档,你将会对这些Android第三方框架有着更深入、更系统的理解。

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,1042详细完整版的【Android设计思想解读开源框架】文档领取方式:点赞+关注,然后私信关键词 【666】即可获得免费领取方式!

1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的?

①Item布局,层级越少越好,使用hierarchyview工具查看优化。
②复用convertView
③使用ViewHolder
④item中有图片时,异步加载
⑤快速滑动时,不加载图片
⑥item中有图片时,应对图片进行适当压缩
⑦实现数据的分页加载

2.对于Android 的安全问题,你知道多少

①错误导出组件
② 参数校验不严
③WebView引入各种安全问题,webview中的js注入
④不混淆、不防二次打包
⑤明文存储关键信息
⑦ 错误使用HTTPS
⑧山寨加密方法
⑨滥用权限、内存泄露、使用debug签名

3. 如何缩减APK包大小?

代码

保持良好的编程习惯,不要重复或者不用的代码,谨慎添加libs,移除使用不到的libs。

使用proguard混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小。

native code的部分,大多数情况下只需要支持armabi与x86的架构即可。如果非必须,可以考虑拿掉x86的部分。

资源

使用Lint工具查找没有使用到的资源。去除不使用的图片,String,XML等等。 assets目录下的资源请确保没有用不上的文件。

生成APK的时候,aapt工具本身会对png做优化,但是在此之前还可以使用其他工具如tinypng对图片进行进一步的压缩预处理。

jpeg还是png,根据需要做选择,在某些时候jpeg可以减少图片的体积。 对于9.png的图片,可拉伸区域尽量切小,另外可以通过使用9.png拉伸达到大图效果的时候尽量不要使用整张大图。

策略

有选择性的提供hdpi,xhdpi,xxhdpi的图片资源。建议优先提供xhdpi的图片,对于mdpi,ldpi与xxxhdpi根据需要提供有差异的部分即可。

尽可能的重用已有的图片资源。例如对称的图片,只需要提供一张,另外一张图片可以通过代码旋转的方式实现。

能用代码绘制实现的功能,尽量不要使用大量的图片。例如减少使用多张图片组成animate-list的AnimationDrawable,这种方式提供了多张图片很占空间。

4.Android与服务器交互的方式中的对称加密和非对称加密是什么?

对称加密,就是加密和解密数据都是使用同一个key,这方面的算法有DES。

非对称加密,加密和解密是使用不同的key。发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有RSA。ssh 和 ssl都是典型的非对称加密。

5.设备横竖屏切换的时候,接下来会发生什么?

1、不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

2、设置Activity的android:configChanges=”orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

3、设置Activity的android:configChanges=”orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

6.Android启动Service的两种方式是什么? 它们的适用情况是什么?

如果后台服务开始后基本可以独立运行的话,可以用startService。音乐播放器就可以这样用。它们会一直运行直到你调用 stopSelf或者stopService。你可以通过发送Intent或者接收Intent来与正在运行的后台服务通信,但大部分时间,你只是启动服务并让它独立运行。如果你需要与后台服务通过一个持续的连接来比较频繁地通信,建议使用bind()。比如你需要定位服务不停地把更新后的地理位置传给UI。Binder比Intent开发起来复杂一些,但如果真的需要,你也只能使用它。

**startService:**生命周期与调用者不同。启动后若调用者未调用stopService而直接退出,Service仍会运行
**bindService:**生命周期与调用者绑定,调用者一旦退出,Service就会调用unBind->onDestroy

7.谈谈你对Android中Context的理解?

**Context:**包含上下文信息(外部值) 的一个参数. Android 中的 Context 分三种,Application Context ,Activity Context ,Service Context.

它描述的是一个应用程序环境的信息,通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息等

8.Service的onCreate回调在UI线程中吗?

Service生命周期的各个回调和其他的应用组件一样,是跑在主线程中,会影响到你的UI操作或者阻塞主线程中的其他事情

题外话

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料免费分享出来。
Android学习PDF+学习视频+面试文档+知识点笔记

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

需要的朋友,可以点赞关注+转发”前往免费领取!

Android进阶学习的思维脑图,给大家参考一个方向。

[外链图片转存中…(img-bhHeIJRZ-1618995951816)]

需要的朋友,可以点赞关注+转发”前往免费领取!

希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_56259515/article/details/115964408

智能推荐

JS:运算符的优先级(+ - * / && || ,等)_js & 优先级-程序员宅基地

文章浏览阅读2.7k次。逗号,运算符:使用,可以分割多个语句,一般在声明变量时使用。举例:// ,运算符可以同时同时声明多个变量,并赋值var a=2,b=5,c=10;其实运算符和学过的数学一样,在JS中运算符也有优先级。比如:先乘除后加减,小括号()的优先级属于一人之上,万人之下的,优先级很高。var a = 1+3*5; // 结果为16那么在JS中也有个自己的运算符优先级表,表中越靠上的优先级越高,优先级越高越会优先计算,如果优先级一样,则从左往右按顺序计算。表格中运算符的优先级不用全部记住,如果遇到_js & 优先级

数据库:数据库水平切分?垂直切分?整合方案?可能存在的问题?_切分存在的问题 数据库-程序员宅基地

文章浏览阅读160次。https://blog.csdn.net/fly_as_tadpole/article/details/87870626_切分存在的问题 数据库

js实现累加(闭包、柯里化)面试经验分享_js科里化累加求和-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏3次。闭包今天面试需要手写一段代码实现 var a = sum(); a.add(1); a.add(2); a.add(3); a.add(4); a.getResult();//打印出10首先看到这个题,我先想到是考察闭包的使用,暂存计算过程中的数据,随时可以打印结果。 function sum(){ let a = 0;//let和var不受影响 return..._js科里化累加求和

java中特殊符号的替换_java替换特殊字符-程序员宅基地

文章浏览阅读4.5k次。【代码】java中特殊符号的替换。_java替换特殊字符

BKP 备份寄存器 & RTC 实时时钟-stm32入门_localtime1672588795-程序员宅基地

文章浏览阅读1.4k次,点赞17次,收藏27次。Unix 时间戳最早是在 Unix 系统使用的,所以叫 Unix 时间戳。之后很多由 Unix 演变而来的系统,也都继承了 Unix 时间戳的规定。目前 Linux、Windows、安卓这些系统它们底层的计时系统,都是使用的 Unix 时间戳。所以在我们现在计算机世界的底层,Unix 时间戳还是在扮演着重要的角色的。Unix 时间戳(Unix Timestamp),它的定义是从 UTC/GMT 的 1970 年 1 月 1 日 0 时 0 分 0 秒开始所经过的秒数,不考虑闰秒。_localtime1672588795

EPP和EDR是什么,如何提高端点安全性-程序员宅基地

文章浏览阅读895次,点赞20次,收藏10次。通过威胁分析,网络管理员可以更好地理解攻击者的动机、手法和目标,从而制定更有效的防御策略,并提供有效的预警和应对措施,降低安全风险。通过部署全面的威胁检测与分析系统、制定合理的安全策略、进行安全培训和演练、建立应急响应机制以及持续监控与升级等方面的实践,我们可以有效地提升组织的安全防御能力,降低潜在的安全风险。虽然 EPP 为端点保护提供了坚实的基础,但它们在检测和阻止新出现的威胁方面的局限性凸显了对额外保护层(例如 EDR 工具)的需求。行为分析技术可以结合机器学习和人工智能技术,实现更精准的威胁检测。

随便推点

使用Tesseract-OCR训练自定义字库_tesseract训练自己的字库-程序员宅基地

文章浏览阅读4k次。文本识别前言由于我的个人博客之前挂了,一直没来得及迁移,所以又重新拾起了csdn…在利用python进行文本识别时,使用tesseract往往是一个非常好的选择,且tesseract支持自己训练的字库,自己训练出来的字库一般具有轻量、有针对性、识别率高的特点。本文就讲述了如何使用tesseract自己训练字库。安装tesseract环境下载Tesseract-OCR官方命令行工具:https://sourceforge.net/projects/tesseract-ocr-alt/files/_tesseract训练自己的字库

怎样知道 CPU 是否支持虚拟化技术(VT) | Linux 中国-程序员宅基地

文章浏览阅读380次。版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79832475 ..._在计算节点检查cpu是否支持vt-x或amd-v。将命令和执行结果提交到答题卷中指定位置

郑州大学远程教育c语言程序设计答案,郑州大学远程教育C语言考试试卷.doc-程序员宅基地

文章浏览阅读755次。郑州大学远程教育C语言考试试卷【ZZJ网上考试系统 v10.1】 本套软件使用权属于:郑州大学远程教育学院 (学期:131)考试课程:6517.C语言程序设计(第3次考试) 考试时间:120分钟 考场:123.15.57.116 考试日期:2013-10-16考号姓名:曹光辉剩余时间:55:23保存交卷帮助窗体顶端本卷共有3大题。窗体底端一、单项选择题(10道小题,共10分)1、C语言并不是非常严..._郑州大学c语言编写程序答案

关于统计分析软件Spss统计个案数和实际数据的个案数不一致问题_spss个案数和实际数不一致-程序员宅基地

文章浏览阅读8.2k次。解决方法:数据---个案加权---在弹出的对话框左侧选择需要处理的一列数据名称,右侧选中“不对个案加权”即可,亲测有效,不妨试试!_spss个案数和实际数不一致

Python利用pip安装tar.gz格式的离线资源包_pip install tar.gz-程序员宅基地

文章浏览阅读8.3k次,点赞4次,收藏16次。2023年5月14日 下午7:52 •下面是Python利用。_pip install tar.gz

论文盘点:ICCV 2019 Top 20,MobileNetV3居首!-程序员宅基地

文章浏览阅读874次,点赞2次,收藏3次。ICCV 是计算机视觉领域三大顶会之一,往届都是奇数年开(与此对应ECCV 在偶数年开,CVPR 每年都开),ICCV 2019 于 2019年10月27日-11月2日召开,距今不足一年..._iccv近 5 年获奖论文盘点!