Android架构设计
文章平均质量分 95
Android世界的小学生
代码就像人生,越丰满,充实,井井有条,越存在着优化,提升的地方。
展开
-
Android 启动优化这点事
前言启动优化这个技术项是得到谷歌官方认可的,下面截一下谷歌官网的描述:用户希望应用能够及时响应并快速加载。启动时间过长的应用不能满足这个期望,并且可能会令用户失望。这种糟糕的体验可能会导致用户在 Play 商店针对您的应用给出很低的评分,甚至完全弃用您的应用。本文档提供的信息可以帮助您优化应用的启动时间。首先介绍启动过程的内部机制。然后,讨论如何剖析启动性能。最后,介绍一些常见的启动时间问题,并给出一些有关如何解决这些问题的提示。作为一个开发者,我个人感觉如果有良好的启动处理流程,比如说给用户一原创 2021-07-08 19:15:57 · 327 阅读 · 1 评论 -
Android LeakCanary2.1 和 OOM说再见
前言说起OOM相信大家都不会陌生,一旦项目进入稳定性测试阶段,长时间的使用相信大多数的应用都不一定扛的住。别担心,不是只有你的扛不住,我的也扛不住,当然大厂他也有扛不住的时候。简单来说如果一个程序很大,那么他就有可能产生OOM,只是概率的高低不一样,稳定性测试后可能没有经过调教的产品4个小时左右就溢出了,而好的产品大概24小时或者更长时间后才会发生溢出。其实只要我们能将OOM发生的时间不断的延长,那么这个问题发生的概率就会无限低!因为从人的生理角度来说不可能不眠不休的不停用一个APP。好了下面我们来原创 2021-07-06 09:49:51 · 354 阅读 · 0 评论 -
Android EVersions-简单到一行搞定所有依赖的版本控制集
EVersions-简单到一行搞定所有依赖的版本控制集。一、目前将我们的依赖库分成了如下部分:1.重用原生依赖于AndroidX部分已经为大家更新到官方公布的最新的稳定版上2.将AndroidX的音视频模块单独列出,方便学习查阅3.第三方应用部分,将之前讨论内容和实际开发相结合已经将二者补全,已经更新到最新版同时附带使用协议。除XCrash(基于MIT),其他均基于Apache-2.0 license 可放心使用4.自研部分已经将所有自研库展出,同时附带部门GitLib地址,方便大家学习使用原创 2021-06-21 22:35:53 · 207 阅读 · 0 评论 -
组件化开发规范指导意见
背景介绍好处风格统一,举一反三,看完一个组件,即可仿照此组件的模式进行规范化开发。引入的某个第三方库版本冲突;不同组件里同名资源文件被覆盖;APP壳工程打包时AndroidManifest.xml合并发生错误;一、Module命名二、包命名包内开发模式三、类命名application命名AppApplication类名开始处要有注释 时间 作者 实现功能简述BaseApp...原创 2020-05-07 16:18:44 · 1474 阅读 · 4 评论 -
再谈组件化模块划分
前言问题总来源于需求。随着时间的推移,部门的组件化已经走过了第一个年头,这一年中我们遇到了很多问题,也解决了很多问题。当然随着组件化的推进,和多种业务场景的接入,新的需求不断产生,1.0版的设计规范和组件化结构的划分,已经难以满足现有需求了。所以根据组内讨论结合实际在项目中出现的问题,和产品经理对产品的希望等等因素,推出了本篇《再谈组件化模块划分》。引入组件化主要是解决两个问题:易维护:将大项目变小,让模块间彼此独立,降低了代码量、定位范围、逻辑耦合等,进而实现易维护的目的。高复用:由于组件的原创 2021-01-14 14:22:18 · 522 阅读 · 0 评论 -
EMedia 让相册、拍照、视频、预览更方便
简介EMedia 让相册、拍照、视频.、预览更方便EMedia是一个基于Android系统的媒体文件选择帮助类。其中主要的功能有相册:支持单选、多选、按文件夹分类、系统预览、自定义预览、是否返回原图等操作。拍照:使用系统相机,拍照后按照指定路径返回照片。录像:支持系统录像,和自定义相机录像,自定义相机支持分辨率,闪光灯最大,最小录制时间等常见功能。选取文件:快速调用系统图片选择器。返回解析:根据请求的内容,封装返回解析工具,返回可用的数据结果。自动获取Provider权限。一、调用相原创 2020-05-27 15:49:16 · 447 阅读 · 0 评论 -
EIMUI 一个简单,美观,易维护,易拓展的IMUI解决方案
致谢从17年开始接触IM即时通讯项目开始,陆续的看了几家的即时通讯方案,作为移动端这里面包括有融云、QQ、极光、环信、网易等等。真正看了UI源码的有:QQ,代码的内在精神是在的,但是不能直接用,需要大量的修改封装。融云,代码封装层次多,阅读难度较大,采取动态注入View的方式进行多类型消息支持。极光,代码简单好读,作为参考有一定价值,多类型Holder写的有点啰嗦。发出来的Aurora 渲染图很好看,不知道是不是我是安卓版的原因,安装上之后感觉有点失望。这里对开源的前辈致敬,你们的项目给了我很原创 2020-05-27 13:13:51 · 1120 阅读 · 0 评论 -
RXResult 优雅的封装Android业务流程
一、简介日常开发中,我们经常要处理,请求响应式的业务。而这种业务往往无法通过一个Activity或者一个模块完成,在组件化类型项目中会变的尤为明显。那么如何优雅地构建易维护、可复用的 Android 业务流程 就成为了一个刚需。RxResult是一款基于RxJava的编程范式,框架分为两个部分其中Lib部分主要实现了将原生:public void startActivityForResult( Intent intent ,int requestCode); public void onActi原创 2020-05-19 16:03:27 · 425 阅读 · 0 评论 -
Android 动态多语言实现方案
语言的准确表带,对于多语言用户来说,是对该国家文化的尊重,和对产品态度的严谨。而在推荐产品的时候如果对客户说,我们的产品支持动态的更新系统语言,在多语言销售时也是一个吸引客户的亮点。说起Android的多语言相信大多数的场景下我们的解决方案大致流程是:将全局String类型的资源抽离到string.xml文件中 然后根据这个基础的string.xml文件进行扩展在key值不变的情况下,根...原创 2021-01-04 14:12:50 · 1692 阅读 · 0 评论 -
Android Handler 从原理到面试题
1.Handler是什么Handler是Android给我们提供用来更新UI的一套机制,也是一套消息处理机制,我们可以发送消息,也可以通过它处理消息。 如Activity的整个生命周期是由 Activity Message Service 来通知处理的。2.为什么要使用HandlerAndroid在设计的时候,就封装了一套消息创建、传递、处理机制,如果不遵循这样的机制就没有办法更...原创 2018-06-21 15:32:16 · 330 阅读 · 0 评论 -
从FragmentPagerAdapter看Fragment 生命周期
之前写过一个关于Fragment使用的帖子,但是并没有对生命周期做太详细的了解。因为那个时候主要是首页上的四个页签,然后用FrameLayout进行管理,使用那个显示哪个就可以了,然后在onCreateView里面初始化并返回我们要使用的View即可。但是最近看到了一种写法就是一个Activity中放置多个数据显示格式相同,按内容划分的Fragment,而且确实按照正常无优化的方法,随着浏览时间的加原创 2017-08-02 16:10:23 · 1805 阅读 · 0 评论 -
2017 Android进程详解 进程保活
首先对Android中进程的优先级从高到低进行一个划分 1.Foreground Process 前台进程 最前断的进程 2.Visible Process 可见的进程 3.Service Process 我们普通创建的Service 4.Background Process 处于背景情况下 没有退出但是没有显示了 5.Empty Process 应用推出了 资源释放了 但是内存还有一些原创 2017-06-11 15:17:32 · 385 阅读 · 0 评论 -
2017 Android Toolbar 教程详解
这几天再看Android的新控件,打算彻底的研究分析一下各个控件的特性,已经设计初衷,毕竟UI是为了用户交互,而通用UI更是为了应付更多的使用场景的。那么就先从这个最简单和实用的Toolbar开始。如果使用的话那么一个APP90%的页面可能是需要顶部导航栏的,那么如果不自定义而使用官方推荐的控件,那么就是Toolbar了。但是不得不说在使用toolbar之前我还是使用自己写的一套顶部导航,毕竟自己写原创 2017-06-20 16:04:53 · 1692 阅读 · 0 评论 -
Android 百万级视频应用 开发记录(一)
来到公司接到项目,已有用户在1亿左右,日活跃用户可能在100W。这些对于我来说,都是一些天文数字。之前开发的应用最多也就是地区性的几千人用而已。所以接到这个项目总体还是很兴奋的,也有点怵。不过挑战只是机遇的另外一种说法。 项目立项:7月20号 ,集合了目前所有的技术骨干人员,都是组长级的去开会了。 项目提交:8月18号 包括产品经理设计 美工出图 测试 实际开发周期:14天左右 7天调试 然原创 2016-07-27 11:44:29 · 500 阅读 · 0 评论 -
Android Fragment 详解 2016 干货
最近看了很多动画和一些效果很好的自定义控件,发现了一件事,就是Android的View层设计思想和古老的JavaSwing是如此的相似。这是在原来的基础上加入了一些输入移动端的生命周期,使其在使用和性能上更好。但是对核心的理解还是可以借鉴一些的。 如果说Activity就是JavaSwing的JFrame那么Fragment 就是在JPanel 一个是容器顶层控件,一个是显示在容器上的中间层控件原创 2016-07-27 16:34:49 · 7217 阅读 · 1 评论 -
深入理解ButterKnife
最近公司使用了自己的框架,为了提高工作效率,使用了注释开发。使得程序可读性和开发效率更快。 其实现原理就是:使用JAVA的反射机制,进行反射动态加载编译,进而完成findViewById的工作。 但是反射也是有其缺点的就是会降低程序的运行速度。 而且框架虽然使用了注释编译,但只是一定程度上降低了开发的工作量,因为要自己打@BoundView(R.id.id) private View view原创 2016-07-18 17:50:17 · 717 阅读 · 0 评论 -
Android ListView 详解 2016 干货
首先说下为什么写这篇文章,最近接手了一个离职同事的项目,点开之后看见它写的ListView真的是跪了,好坏不说,如果单单只是为了实现而”不择手段”,那么对自己的职业生涯又有什么好处?除了项目被重构,我估计如果真的有一天被技术或者客户反馈了你的职位也要被重构了。所以希望写这篇文章帮助大家,第一个将基本功扎实起来,第二个应付各种各样的ListView都不发怵,都有一套可一应对的方案。ListView作为原创 2016-08-25 10:47:19 · 767 阅读 · 0 评论 -
2016 Android setContentView LayoutInflater 加载 原理
这个东西你说有用吗?但是用的时候好像一句话就搞定了。你说没有那但是那个Activity都必须有他。所以还是要学习一下,以备不时只需。因为在软件里越是用着方便的东西,可能封装的更好,里面藏着很好的设计思想和一些平常学习不到的知识。对于setContentView大家应该都知道他是干什么的,从字面上就可以看出来,设置内容页面。那么这个过程是如何进行的我想大家可能都没有注意过。说句实话我也没有怎么研究过,原创 2016-10-19 16:50:33 · 591 阅读 · 0 评论 -
Android 常见的高级控件
为什么要写这个那,因为在程序开发过程中,经常会使用到一些,基本控件无法满足的页面,那么这个时候就需要我们自己自定义View了,这可不是个轻松的活,但是有一些控件是Android为我们设计好的,那么我们给他换个皮肤,直接拿过来用,不是更省心省力吗。自动完成文本框 在Android开发中提供了两种智能输入框——AutoCompleteTextView和MultiAutoCompleteTextView原创 2016-10-20 13:32:32 · 745 阅读 · 0 评论 -
Android 自定义底部弹窗
今天看了一个简单而实用的Demo所以特地到这里写个帖子,进行一些总结。第一这个技术点算是很常用的,当然我也有几种方法进行实现,但是自认没有这个简单,复用性也没有这个高。那么进入正题,就像题目写的没错就是自定义底部弹窗。我那之前是使用PopWindow这个算是正统的使用方法,当然你如果不太熟悉PopWindow,那么你还可以用一个比较讨巧的方法,就是定义一个背景为半透明黑色的Activity,就可以了原创 2016-11-14 16:20:41 · 703 阅读 · 0 评论 -
Android加载器LoaderManager.loaderCallbacks
Loadersloader在android 3.0之后才被引入,它简化了在activity和fragment中异步加载数据的步骤(个人认为简化是次要的,更重要的是优雅的实现了异步加载),loader有如下特点:适用于每个activity和fragment提供异步加载的实现方法监听数据源的一举一动,在数据发生变更时自动返回新的结果当由于配置改变而被重新创建后,它们自动重连到上一个加载器的游标,所以不必原创 2016-12-01 14:26:00 · 1755 阅读 · 0 评论 -
从Java到Kotlin
作为一位Andorid开发者,或者说一名前端开发者,实在是感概“日新月异,一山更比一山高”。2016年的夏天我还在解决从Android4.0到5.0时的权限适配问题,以为这已经是一个很大的跨度了,但是到今年我已经要开始考虑Android7.0的安全适配问题了,然后如期而至的Anroid8.0也到来。这只反应出一个问题——前端开发者必须时刻紧跟时代的步伐,去吸收,接纳新鲜事物,和新技术。暂且不管,甲骨原创 2017-05-19 16:24:03 · 2668 阅读 · 1 评论 -
Android Base64 Md5 SHA1 编码解码 解析
主要讲解的内容:编码、数字摘要、加密、解密 编码:Base64、urlEncoder、urlDecoder当我们发送一个get请求的时候 形式如下 xxx?name=阿斯顿f&age=100当我们在一个请求中传递的数据出现了中文和一些Url中定义的符号如(?&)那么请求就无法识别这里要强调的是无论是get还是post在传递值的时候都是不支持上面那些敏感词的传递的。如果传送的请求包含上述的信息,那原创 2016-07-10 10:31:05 · 1236 阅读 · 0 评论