自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android 开发架构

热爱技术,热爱分享,加油,孤独的编程人

  • 博客(48)
  • 收藏
  • 关注

原创 Android内存泄漏分析与解决办法

这篇文章是因为今天我的小团子告诉我她的手机”微信“无响应了,后来经过我的了解,就是当收到“19 。。。。”(19.数字后面为15个句号.字符),手机会出现卡死现象,作为Android开发者都知道这个是ANR的问题,这顿时勾起了我的兴趣,然后我就跟她专业性的分析什么是ANR,之后讲到内存泄漏会引起内存溢出的问题,也决定以此为契机写一篇文章来谈谈Android内存泄漏,这篇文章也算是欠下很久了吧。以下...

2019-01-30 22:30:02 325

原创 ViewPager,RecyclerView,SrollView嵌套事件冲突解决。

接上篇:Android事件分发机制完全解析,带你从源码的角度彻底理解之前在解决ListView和Item之间的滑动冲突,以及点击事件带来的滑动失效参考如下代码 android:descendantFocusability="blocksDescendants该属性是当一个view 获取焦点时,定义 ViewGroup 和其子控件直接的关系,常用来>解决父控件的焦点或者点击事...

2019-01-30 21:00:35 2426

原创 Android事件分发机制完全解析,带你从源码的角度彻底理解

Android中所有事件的传递都是自上而下,然后自下而上的一个传递过程,直到事件被消费,结束掉。Android事件构成在Android中,事件主要包括点按、长按、拖拽、滑动等,点按又包括单击和双击,另外还包括单指操作和多指操作。所有这些都构成了Android中得事件响应。总的来说,所有的事件都由如下三个部分作为基础:按下(ACTION_DOWN)移动(ACTION_MOVE)抬起(AC...

2019-01-30 20:31:12 354 1

原创 Android 实现一个通用的圆角布局

前言我们在平时的开发中,经常会遇到圆角需求,比如下图一般的实现方法是上面的图片左上和右上设置圆角,下面的文字部分左下和右下设置圆角,而 Glide 默认是不支持指定位置设置圆角的,需要通过自定义 Transformation 实现,而 GIF 动图也是不支持圆角的。有些同学说了,加个遮罩不就行了吗?先不说会不会被视觉小姐姐喷:一个圆角都做不了,还要我给你做遮罩图!我自己本身也是无法接受...

2019-01-30 14:27:27 2339

原创 Retrofit2深入浅出

Retrofit2简单的说就是一个网络请求的适配器,它将一个基本的Java接口通过动态代理的方式翻译成一个HTTP请求,并通过OkHttp去发送请求。此外它还具有强大的可扩展性,支持各种格式转换以及RxJava。本文基于Retrofit2解析。Retrofit2基本使用先定义一个PersonalProtocol的java接口public interface PersonalProtocol ...

2019-01-29 20:31:32 248

原创 Android开发之仿微博贴纸效果实现

原文链接: https://www.jianshu.com/p/258059a08cad1 概述之前写过一篇关于图像变换处理的文章《Android开发之图像处理那点事——变换》,学以致用,这次我们来实现仿微博的贴纸效果,我打算分成两部分来写:基础篇:单图贴纸效果,利用矩阵变化+手势识别实现贴纸的自由缩放、旋转、平移,以面向过程的代码让你知道每一步操作的实现原理。强化篇:仿美图秀秀的多图...

2019-01-29 16:26:56 803 1

原创 Android 官方架构组件(三)——ViewModel

这是Android官方架构组件系列的第三篇文章,前两篇点击标题即可跳转Android 官方架构组件(一)——LifecycleAndroid官方架构组件(二)——LiveDataViewModel类主要用来存储和管理与UI相关的数据,它能够让数据在屏幕旋转等配置信息改变导致UI重建的情况下不被销毁。ViewModel生命周期ViewModel 对象存活在系统中不被回收的时间是由创建V...

2019-01-29 15:40:43 910

原创 自定义LayoutManager,在path上布局

基础知识重写2个方法 override fun generateDefaultLayoutParams(): RecyclerView.LayoutParams override fun onLayoutChildren(recycler: RecyclerView.Recycler, state: RecyclerView.State)第一个都差不多,去系统提供的...

2019-01-29 14:50:56 747

原创 2018年秋招腾讯、饿了么、百度Android岗一面都问到哪些问题?

2018年已过,已经迎来了全新的2019,面试Android开发岗的伙伴也分享了很多自己的面试经验,这里给大家整理了网友分享的2018年秋招腾讯、饿了么、百度Android岗一面被问到的面试题,我们一起来看看:腾讯Android岗一面看到实习项目里面有写了AI摄像头,问了图像相关的东西(噩梦的开始。。问我图片有几通道,占多少内存,打扰了,最后让我猜猜看。。。)***作系统相关(32位系统...

2019-01-28 20:31:42 645 1

原创 通用的Android练习项目模板配置「常用工具类,项目结构,模板使用」

1 概述作者:舍长III原文链接: https://www.jianshu.com/p/cf6ce2139d94为什么会有这篇文章呢,是因为我发现我以前在学习开发知识时,代码整理得太不好了。经常是会发生以前学习过的知识,现在却找不到代码在哪里的情况,于是又要重新开始。因为Android开发涉及的内容很多,如果想要系统的去整理笔记的话,就必须要分文件夹,分项目进行管理。每个项目对应着不同...

2019-01-28 16:36:26 369

原创 一种新的架构设计思路,用户行为驱动开发

前提用户行为驱动开发是什么?它是一种适用前端的面向用户行为的开发思想,是一个用户行为的产生到执行,驱动数据的产生,再由数据流驱动渲染的流程。我认为,前端要完成的工作就是接收用户行为,解析用户行为,到给用户一个反馈。在各种用户行为形成一个序列后,在之后的开发中可以得到很多方便。用户行为驱动开发是如何诞生的?由于每个 App 都需要采集数据进行分析,需要进行数据埋点,这些数据往往都是一个用户行...

2019-01-28 15:40:27 11278 1

原创 Android开发中的面向切面编程AOP

目录有什么用App中很多跳转的地方都需要登入校验,无非就是if-else,但是如果这样的判断有很多,我们就得重复很多次,或者有一天需求变动,有可能就会更改多个地方。类似的还有网络判断,权限管理,Log日志的统一管理这样的问题,如果更优雅的实现这些功能呢?App 调试时,如果一眼无法看出错误在哪里,有时会把一些关键信息打印出来,如何快速将方法的入参和出参都打印出来?如何安全地执行方法,不...

2019-01-28 14:51:18 1430

原创 搞事情,自定义 LayoutInflate 实现酷炫引导页

今天,我们来搞点事情,自定义一个 LayoutInflate,搞点有意思的东西,实现一个酷炫的动画。首先,在自定义 LayoutInflate 之前,我们要先分析一下 LayoutInflate 的源码,了解了源码的实现方式,才能定制嘛~~~~好了,怕你们无聊跑了,先放效果图出来镇贴好了,效果看完了,那就先从LayoutInflate的源码开始吧。LayoutInflate先看看官方文档...

2019-01-27 20:37:40 277

原创 图文搞懂 RecyclerView 刷新机制 | 源码分析

前面分析了RecyclerView的基本结构,强烈欢迎先看一下。本文继续来看一下RecyclerView是如何完成UI的刷新以及在滑动时子View的添加逻辑。本文会从源码分析两件事 :adapter.notifyXXX()时RecyclerView的UI刷新的逻辑,即子View是如何添加到RecyclerView中的。在数据存在的情况下,滑动RecyclerView时子View是如何...

2019-01-25 21:35:53 1341 1

原创 图文搞懂RecyclerView 的各部分组成 | RecyclerView进阶

这是一个系列,该文为系列第一篇。1 概述RecyclerView作为Android开发中最常用的View之一。很多App的feed流都是使用RecyclerView来实现的。加深对于RecyclerView的掌握对于开发效率和开发质量都有很重要的意义。接下来我打算从源码角度剖析RecyclerView的实现,加深对于RecycledView的了解。RecyclerView的源码实现还是...

2019-01-25 19:32:57 1158 1

原创 android 状态栏梳理

本文涉及对 StatusBar 进行一下操作:改全屏,StatusBar 不显示改全屏,StatusBar 显示StatusBar 透明StatusBar 改颜色StatusBar 改字体颜色全屏,StatusBar 不显示这个我们在闪屏页用,有4种写法: // 方法1 getWindow().addFlags(WindowManager.LayoutPara...

2019-01-25 14:17:18 646

原创 Android Fragment的用法(二)

如果你经常使用平板电脑,应该会发现很多的平板应用现在都采用的是双页模式(程序会在左侧的面板上显示一个包含子项的列表,在右侧的面板上显示内容),因为平板电脑的屏幕足够大,完全可以同时显示下两页的内容,但手机的屏幕一次就只能显示一页的内容,因此两个页面需要分开显示。那么怎样才能在运行时判断程序应该是使用双页模式还是单页模式呢?这就需要借助限定符(Qualifiers)来实现了。我们通过一个例子来学习...

2019-01-24 19:56:10 816 1

原创 Android Fragment的用法(一)

1、碎片是什么碎片(Fragment)是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。虽然碎片对你来说应该是个全新的概念,但我相信你学习起来应该毫不费力,因为它和活动实在是太像了,同样都能包含布局,同样都有自己的生命周期。你甚至可以将碎片理解成一个迷你型的活动,虽然这个迷你型的活动有可能和普通的活动是一样大的。那么究竟要如何使用碎片才...

2019-01-24 19:51:50 681 1

原创 深入浅出Kotlin协程

协程协程是什么呢?综合了很多人的总结,一言蔽之就是一种组织代码运行的方式。协程和线程,进程不同,它通常不是由操作系统底层直接提供支持,而是通过应用层的库来实现,譬如Kotlin的协程,其实就是依赖java/android的线程/线程池再加上一些对上下文的控制逻辑来实现的。那么使用协程能带来什么好处呢?仅仅从概念层面去讲也可以总结出几条:因为某些协程库的实现使用了任务分发(比如Kot...

2019-01-24 16:36:38 2380

原创 看似无用,实则重要的Gradle Wrapper

1.为什么需要Gradle WrapperGradle Wrapper称为Gradle包装器,是对Gradle的一层包装。为什么需要Gradle Wrapper呢?比如在一个开发团队中,如果每进来一个成员,都需要在计算机中安装Gradle,这个时候运行Gradle的环境和版本就会对构建结果带来不确定性。针对这个问题,Gradle提供了一个解决方案,那就是Gradle Wrapper,它是一个脚本...

2019-01-23 15:53:10 1505

原创 Android 官方架构组件(二)——LiveData

上一篇文章讲到了Android架构组件之一Lifecycle(Android 官方架构组件(一)——Lifecycle),现在我们再来看看另一个成员LiveData。LiveData是google发布的lifecycle-aware components中的一个组件,除了能实现数据和View的绑定响应之外,它最大的特点就是具备生命周期感知功能LiveData的优点能够确保数据和UI统...

2019-01-23 14:33:35 12337 1

原创 Android 一份详细的Retrofit2.0基本使用总结

一、前言今天主要是对于网络请求框架Retrofit2.0做一次总结,并通过具体实例展示一下Retrofit2.0的使用方法。二、概述Retrofit2.0是一款基于OkHttp的非常适用于RESTful URL格式的HTTP网络请求框架。OkHttp是Square公司贡献的一款轻量级网络请求框架,我在这里就不做具体介绍了,后续我会对这些主流的网络框架的优缺做个总结,RESTful是一种软件架...

2019-01-22 16:33:42 810

原创 Android 内存泄露:详解 Handler 内存泄露的原因

前言在Android开发中,内存泄露 十分常见1.内存泄露的定义:本该被回收的对象不能被回收而停留在堆内存中2.内存泄露出现的原因:当一个对象已经不再被使用时,本该被回收但却因为有另外一个正在使用的对象持有它的引用从而导致它不能被回收。 这就导致了内存泄漏。本文将详细讲解内存泄露的其中一种情况:在Handler中发生的内存泄露1. 问题描述Handler的一般用法 = 新建...

2019-01-22 15:15:01 783 1

原创 Android简单实用的MVP框架

前言MVP模式是Android目前一个非常流行的框架,相信很多人在项目中或多或少的使用过它,相比经典的MVC,MVP更加适用于Android应用的开发,在这里我们就不再对它们之前的差别进行详细分析了,相信大部分人都已经非常的了解了,现在让我们单刀直入的写一个实用的MVP框架吧。由于本人能力水平有限,并且也是我第一次写博客,有不正确的地方还望大家多指正或者有更好的想法我们多交流,毕竟增强自身本领才...

2019-01-21 20:39:10 614

原创 帮你解决一下RecyclerView滑动到item顶部

最近在开发的时候,遇到了需要通过代码使得RecyclerView能够滑到指定item顶部位置的需求,在查看源码之后,发现RecyclerView已经提供了实现滑动到指定位置的方法,下面是可实现方法://平滑滚动recyclerView.smoothScrollToPosition(position);//非平滑滚动recyclerView.scrollToPosition(position...

2019-01-21 16:43:34 3793 1

原创 与Android热更新方案Amigo的初次接触

修复前:点击文字没有跳转修复后:点击文字可以跳转(增加了Activity和布局文件)其实热更新最重要的是不需要重新安装apk,有的甚至不需要重启app,就可以更新代码或者资源文件。我对比目前的几大主流的热更新方案,感觉Amigo是目前最适合我的。上表来自Amigo的Github主页,觉得100%的成功率起到了很好的宣传效果!tinker的功能非常强大,基本除了AndroidMani...

2019-01-21 15:54:21 979 1

原创 Android 优化——内存优化

优化的意义减少 OOM,提高应用稳定性。减少卡顿,提高应用流畅度。减少内存占用,提高应用后台运行时的存活率。减少异常发生,减少代码逻辑隐患。垃圾回收在 GC 的过程中,其它在工作的线程会暂停,包括负责绘制的 UI 线程,并且在不同区域的内存释放速度也有一定的差异,但不管在哪个区域,都要到这次 GC 内存回收完成后,才会继续执行原来的线程。虽然一次消耗性能不大,但如果大量这样的重复...

2019-01-18 20:45:18 10537

原创 Android ClassLoader机制

传统JVMjava虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类的生命周期类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initia...

2019-01-18 14:42:04 284

原创 Android组件化方案及组件消息总线modular-event实战

背景组件化作为Android客户端技术的一个重要分支,近年来一直是业界积极探索和实践的方向。美团内部各个Android开发团队也在尝试和实践不同的组件化方案,并且在组件化通信框架上也有很多高质量的产出。最近,我们团队对美团零售收银和美团轻收银两款Android App进行了组件化改造。本文主要介绍我们的组件化方案,希望对从事Android组件化开发的同学能有所启发。为什么要组件化近年来,为什...

2019-01-17 16:14:54 555

原创 Android大厂面试经验分享

2017年是转折的一年,2018年算是收获的一年,先分享一下offer的情况。1.阿里高德(offer)2.爱奇艺(offer)3.腾讯视频(offer)4.小米(被拒)5.今日头条(被拒)在面试的过程中我深深的感受到,对于一个优秀的安卓开发来说,首先摆在第一位的还是他/她作为一个软件工程师的基本素养。无论你是做前端还是后端,最后定义你的优秀程度的还是作为软件工程师的基本素养,学习能...

2019-01-17 14:38:23 420

原创 Android 官方架构组件(一)——Lifecycle

什么是Lifecycle?Lifecycle 组件指的是 android.arch.lifecycle 包下提供的各种类与接口,可以让开发者构建能感知其他组件(主要指Activity 、Fragment)生命周期(lifecycle-aware)的类。为什么要引进Lifecycle?前面说了,Lifecycle能够让开发者构建能感知其他组件(主要指Activity 、Fragment)生命周...

2019-01-17 14:21:00 7192 1

原创 Android-图片的选择,裁剪,压缩,适配高版本

效果展示效果展示链接https://v.qq.com/x/page/r0735cdxorz.html1.图片的选取拍照我们之前设置拍照保存的文件地址的 Uri,都是直接Intent.putExtra(MediaStore.EXTRA_OUTPUT,文件保存的Uri路径),但是 7.0之后,对用户权限提高了保护,之前那种方式行不通了,所以我们要做7.0的判断,用 FileProvider ...

2019-01-16 16:36:25 466

原创 RecyclerView 使用总结以及常见问题解决方案

1 RecycleView设置了数据不显示本文主要讲一下我个人对于RecycleView的使用的一些思考以及一些常见的问题怎么解决。先来看一下使用RecycleView时常见的问题以及一些需求。这个往往是因为你没有设置LayoutManger。 没有LayoutManger的话RecycleView是无法布局的,即是无法展示数据,下面是RecycleView布局的源码:void disp...

2019-01-16 14:39:46 14674 2

原创 给Android工程师的Java后台学习建议

导读最近听到一个真实的事,就是一个Android开发,前端、后端和Android都做过,已经快35了,要20K都没人要。这其实是一个悲哀,究其原因不是岁数大了,而是岁数大了却没有一个能拿的出手的技术栈。这也给大家提了个醒,在35岁前至少要有一门精通的技术,深度和广度都要有才有更大的几率不被淘汰掉。最近看到了本篇文章,很赞同文章的观点,推荐给大家,下面是文章的正文。作为一个原生Android开发...

2019-01-16 14:20:37 1931

原创 让Gradle放飞你的apk构建

频繁的打包构建,时不时发布更新,是否总防不胜防的扰乱你的工作(tou lan)状态?(◐‿◑) 这是一篇简“短”解决方法,让Apk的构建参数完全由外界决定。通过外部配置版本信息、服务器地址、渠道、编译sdk版本等,直接构建apk,无需开发人员再次修改提交gradle等文件,解放你的双手吧。以上场景,其实来源于最近的日常需求。因为项目的构建、测试、发布,都是在固定的打包服务器完成,也就是远程打...

2019-01-15 17:00:55 8808

原创 Android封装RxJava2+retrofit2实现彻底解耦网络层和逻辑层

更加优雅的实现网络请求完整项目Github地址:https://github.com/pokerfaceCmy/rxjava_retrofit_demo/tree/master前言最近在用RxJava2+retrofit2来实现网络请求,一开始的时候我参考了这篇文章:如何用RxJava2.0.7和Retrofit2.2.0优雅的实现网络请求来封装自己的网络请求的逻辑。一开始的使用用的很爽...

2019-01-15 16:29:49 10058 1

原创 网易考拉 Android 通知栏适配全方案

由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更多人的口味。本文总结了Android 通知栏的版本迭代过程,在通知栏开发过程中所遇到的各种各样的坑,以及一些解决技巧,特别的,对于大众期盼的Android 8.0的到来,通知栏又会发生怎样的改变呢?接...

2019-01-15 14:54:10 1165 1

原创 Android内存优化总结【整理】

一、Android 内存管理1.1 DalvikDalvik虚拟机是Android程序的虚拟机,是Android中Java程序的运行基础。其指令集基于寄存器架构,执行其特有的文件格式——dex字节码来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。Dalvik虚拟机的内存大体上可以分为 Java Object Heap、Bitmap Memory和Native H...

2019-01-14 17:23:57 828

原创 微信小程序前端生成图片用于分享朋友圈最终解决方案

前段时间一直在做微信小程序的,遇到了许多的坑,其中遇到了需要前端合成图片保存到相册用于分享到朋友圈。借简书记录一下最终解决方案,先看一下最终效果该文章的所有演示代码托管与github,代码地址,微信调试工具中访问请关闭合法域名检查,开启es6转换,真机调试请打开调试vconsole该文章解决的问题如下:1、微信小程序生成图片,并保存到相册2、微信小程序生成图片实现响应式3、微信小程...

2019-01-14 14:17:45 4390 1

原创 Android性能优化之布局优化

Android性能优化方面也有很多文章了,这里就做一个总结,从原理到方法,工具等做一个简单的了解,从而可以慢慢地改变编码风格,从而提高性能。一、Android系统是如何处理UI组件的更新操作的既然和布局相关,那么我们需要了解Android系统是如何处理UI组件的更新操作的。1、Android需要把XML布局文件转换成GPU能够识别并绘制的对象。这个操作是在DisplayList的帮助下完成的...

2019-01-12 21:25:19 367

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除