
android开发
文章平均质量分 56
粗鲁先生
基础不牢,地动山摇!
展开
-
Android源码设计模式——备忘录模式
本篇博客分享——备忘录模式。 它是一种行为模式,用于保存对象的当前状态,并且在之后的某个时间点,该对象可以恢复到之前的状态,也就是说:我后悔了,我想回到以前的状态。可以,这时候“备忘录模式”可以给你后悔的机会。备忘录模式的定义在不破坏对象封闭的前提下,捕获到对象的当前状态,并且在该对象之外保存这个状态,以便于以后该对象恢复到该状态。备忘录模式的使用场景需要保存对象在某一时刻的状态和部分状...原创 2020-01-09 22:05:10 · 576 阅读 · 0 评论 -
Android进阶从零学习自定义View——View树的绘制机制
上篇博客,讲述了一些基本的知识点,《Android进阶从零学习自定义View——概念基础》不熟悉的小伙伴,可以先看下上篇博客。对于工作3-5年的开发者而言,相信绝大部分被问到过这个问题:了解自定义View吗?这短短的一句话,你可能会说:了解啊,自定义View需要重写onMeasure,onLayout, onDraw三个方法。没了,没了,对,没下文了, 那这个问题十有八九是跪了,不用想。...原创 2019-12-26 19:38:50 · 367 阅读 · 0 评论 -
Android源码设计模式——工厂模式
工厂模式也是为了构建一个新的对象,它是创建型模式的一种。Android源码设计模式——Build模式(应用:AlertDialog源码分析)上述是之前的Build模式,也是创建型模式一种,不懂的小伙伴可以回看下上篇博客。工厂模式的定义自我叙述:定义一个抽象产品类,然后继承该抽象类形成很多的子类,在子类相当于是个:成品的产品,也就是我们真正要构建的产品。在定义一个抽象类,该抽象类内部:创建子...原创 2019-12-09 18:10:53 · 313 阅读 · 0 评论 -
Android源码设计模式——原型模式
上篇博客学习了Build模式,本篇博客学习一下原型模式,其实说到原型模式,刚开始听的时候一脸懵逼,但是学习完了之后,真的是感觉简单。原型模式介绍原型模式是创建型模式的一种,其实就是想要以某一个对象为“模版”,“复制”出相同的对象,也就是“克隆”出一摸一样的对象。原型模式多用于需要构建复杂的对象时使用。因为此时“复制”一个对象比创建new一个对象效率更高。原型模式定义用原型对象的实例执行创建...原创 2019-12-07 14:44:53 · 262 阅读 · 0 评论 -
Android源码设计模式——Build模式(应用:AlertDialog源码分析)
前言上篇博客讲述了单例模式:Android源码设计模式——单例模式实际上在学习单例模式之前,我觉得单例模式就是这样写的(懒汉式),但具体分哪些种,以及为什么这样写,是迷糊的。如果有小伙伴也是跟我一样,请移步上篇博客。同理本篇博客记录一下构建者模式的学习,对于个人而言,之前学习过好几遍构建者模式,但都会有不同的体会,此次也不例外。首先对于构建者模式,很多第三方框架都有用到,比如:Glide。...原创 2019-12-05 17:37:03 · 293 阅读 · 0 评论 -
Android源码设计模式——单例模式
实际上关于设计模式原创 2019-11-21 17:11:43 · 390 阅读 · 0 评论 -
Android自定义View——手把手教你九宫格手势解锁
最近写了个九宫格手势解锁,先附上效果图吧? 上面是效果图,再附上代码?行。Github 戳我这篇博客讲述一下实现这个效果的思路。我觉得知道了这个思路,并且顺着这个思路走,每个人都可以自己写一个出来。但是写出来的代码健壮否,就看个人功底了。创建GestureView继承自View在这个代码里你只需要做两件事实现onDraw方法实现onTouchEvent方法记下来我们肢解一下...原创 2019-11-03 12:36:13 · 1162 阅读 · 1 评论 -
Android进阶9:手写Bufferknife(编译时注解)
说到Bufferknife,相信基本都用过。在Activity中使用:class ExampleActivity extends Activity { @BindView(R.id.title) TextView title; @BindView(R.id.subtitle) TextView subtitle; @BindView(R.id.footer) TextView fo...原创 2019-10-27 12:26:25 · 446 阅读 · 0 评论 -
Android 插件化开发——手写基于静态代理的插件化框架(启动Activity)
自学插件化有一段时间了,这篇博客算是对前几个月学习的“开花结果”。先给自己鼓个掌!其实这段时间是真累,白天工作,晚上九点下班,到家再学习插件化,早上早起学习插件化,真的是累的不行,但是还是比较充实的。好了,步入正题:基于静态代理的插件化前言说到插件化,我是被那个斗地主吸引了,不知道各位有没有玩过这个游戏,在游戏大厅中:想玩斗地主的话,就点击下载,然后想玩麻将的话,就点击下载麻将,下载加载完毕...原创 2019-10-19 14:05:30 · 702 阅读 · 1 评论 -
Android MVVM框架的认识和使用(进阶二)
上一篇文章主要叙述了基本数据类型和引用数据类型在MVVM中的使用。Android MVVM框架的认识和使用(一)这篇文章之所以单独拎出来说,是因为还是比较重要的,这篇文章主要讲述一下,RecyclerView在MVVM中使用。 步骤1: 首先创建我们的数据模型:package com.example.liumengqiang.mvvmoneproject.second;/**...原创 2018-07-02 17:07:39 · 1815 阅读 · 0 评论 -
Android 沉浸式状态栏
关于沉浸式状态栏,网上挺多的,有一些还是第三方,个人感觉还是原生好一点,日常见到的比较多的情况就两种:toolbar + status 同色一张图片延伸到状态栏。第一种情况的效果图如下: 第二种情况的效果图如下: 步骤一:创建values-19文件夹和values-v21 (兼容)文件夹<?xml version="1.0" encoding="utf-8&a原创 2018-06-27 16:02:15 · 272 阅读 · 0 评论 -
LinearLayout和RelativeLayout性能总结
其实关于这个问题,看了比较多的博客,看了比较多的分析,下面我总结一下,至于源码,网上很多,大家可以自行搜索。首先关于这两个布局,最开始我们创建布局,默认的是LineaLayout,后来创建布局,默认是RelativeLayout,从AS 2.2开始默认布局是ConstraintLayout。 就算啥也不懂,也应该知道,IDE是GOOGLE推出的,自然而然就代表了人家谷歌的意思。九年义务教育就...原创 2018-06-28 16:47:16 · 550 阅读 · 0 评论 -
Android进阶6:View的事件分发机制源码
前言关于事件分发机制,这个东西对于开发者,很重要,例如:解决滑动冲突;对于面试者,也很重要,比如:请描述一下View的事件分发机制~。说句实话,这个源码是看了很长时间,一直不敢写这篇文章,生怕误人子弟啊,说实话,刚开始刚觉很难,但是硬着头皮再看,也就那么回事了。。。View分发机制的相关方法ViewdispatchTouchEvent(ev) : 专门处理事件onTouchEvent(...原创 2018-12-10 20:39:04 · 620 阅读 · 2 评论 -
Android 插件化开发——基础底层知识(反射)
继续我们的底层知识学习,为后面的插件化开发作准备。上一篇:Android 插件化开发——基础底层知识(Service)本篇博客学习反射,其实说到反射,正常开发用不到,所以之前也不太会,不,是不会。如果不是为了学习了解插件化,真的还是不会主动去学习反射。反射关于反射,我们需要掌握以下几点:获得一个类获得类对象获得静态函数获得非静态函数获得类非静态成员变量并修改获得类的静态...原创 2019-06-20 22:32:23 · 391 阅读 · 0 评论 -
Android MVVM框架的认识和使用(一)
关于这个MVVM,现在公司的框架就是MVVM,刚开始感觉MVVM真的麻烦,真的不爽,但是真正用起来的时候,感觉比MVP好用多了,好用的不是点半点。= - =。嗯,喜新厌旧~。关于MVVM的理解如下:Model :负责数据实现和逻辑处理,类似MVP。View : 对应于Activity和XML,负责View的绘制以及与用户交互,类似MVP。ViewModel : 创建关联,将mode...原创 2018-07-01 12:34:45 · 20394 阅读 · 5 评论 -
Android 8.0系统关于手动打开安装应用权限问题
在Android 8.0以上系统的手机上,会发现有部份手机,app下载完毕之后但是安装不上,也就是下载完毕之后,闪退。这个问题在8.0系统的手机上不是必现的,这可能和手机厂商的系统处理有关,但是有一点是确定的:Google从Android8.0系统开始,关闭了未知应用安装权限,需要用户手动点开。第一步:当APK下载完毕之后,正常来说要跳转到APK安装页面,但是8.0系统需要做一个判断:是否用户...原创 2018-07-01 09:46:41 · 3599 阅读 · 0 评论 -
RecyclerView ItemDecoration的使用
RecyclerView真的很强大,真心的,这一点毋庸置疑,现在公司的项目中有用到,趁着项目刚上线,空余时间总结一下项目中的知识点。 首先项目中需求如下图(有改动):消息分为:系统消息和活动消息,服务端返回一个列表,根据列表将相邻的Item分别归类,相同类型Item的同一个标题,不相同的Item,就多一个标题。如上图所示,系统消息在一块,紧接着是活动消息,再紧接着时系统消….。其实这...原创 2018-06-29 20:59:31 · 245 阅读 · 0 评论 -
Android 清空缓存
public class ClearCatchApp { /** * @param context * @param catchPathString 缓存路径 * @return * @throws Exception * 当前缓存大小 */ public static String getTotalCacheSize(Co原创 2017-12-14 19:45:20 · 318 阅读 · 0 评论 -
高德地图代码块总结
1:所有mark显示在屏幕中央LatLngBounds.Builder boundsBuilder = new LatLngBounds.Builder();//存放所有点的经纬度boundsBuilder.include(new LatLng(model.latitude, model.longitude));//把所有点都include进去(LatLng类型)aMap.animateCamera原创 2017-12-12 10:57:54 · 1211 阅读 · 0 评论 -
Android 友盟推送踩坑
最近项目使用推送是友盟推送,实际上推送原理相同,但是友盟推送和极光推送在Android端的代码编写还是有很大差别的。极光推送我记得是定义广播,然后在广播中发送通知,在设置跳转以一类的,但是在友盟推送中,友盟封装好了,有响应的回调接口。 极光推送踩坑: http://blog.youkuaiyun.com/lmq121210/article/details/77100935 友盟推送自定义通知:final原创 2017-11-15 20:10:02 · 3342 阅读 · 0 评论 -
Android 代码获取SHA1值
/** * 获取SHA1值 * * @param context * @return */ public static String getSHA1(Context context) { try { PackageInfo info = context.getPackageManager().getPa原创 2017-11-20 09:33:37 · 491 阅读 · 0 评论 -
git 命令行
Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。Git常用操作命令:1) 远程仓库相关命令检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remote -v添加远程仓库:$ git remote add [name] [url]删除远程仓库:$ git转载 2017-11-17 16:53:04 · 276 阅读 · 1 评论 -
Android进阶7:内存优化——LeakCanary原理分析
好的项目离不开健壮的代码,对于想要写出健壮的代码,解决内存泄漏是必须的。对于LeakCanary,对于大多人是不陌生的,也就是检测内存泄漏的工具。可能在代码中我们会这样引入LeakCanary: //检查leakCanary和APP是否在同一个进程,如果是同一个进程就返回,不在同一个进程,就注册。 //因为不再同一个进程,不会对APP进程造成消极影响(如:APP进...原创 2018-12-22 13:33:21 · 1613 阅读 · 2 评论 -
Android项目环境搭建问题记录
1: Unknown host ‘d29vzk4ow07wi7.cloudfront.net’. You may need to adjust the proxy settings in Gradle.将项目根build.gradle目录下的两个jcenter() 替换为:maven { url 'http://maven.aliyun.com/nexus/content/groups/pub...原创 2019-05-22 15:23:24 · 427 阅读 · 0 评论 -
使用Retrofit框架,怎样通过返回的头部信息header解析respond?
由于公司最近的这个项目要求保密性比较高,所以就要求我们在前后端传输上面做做文章了。项目使用的是Retrofit框架,现在需要通过response中header的key作为密钥进行解密,常规的做法肯定是:在onResponse回调方法中,取出header,再解密。这种方法可以,但是不美观,耦合度太高。我们知道Retrofit提供了Intercept和Converter.Factory接口, In...原创 2019-05-27 11:03:54 · 3225 阅读 · 1 评论 -
手写Android热修复
其实关于为什么会产生热修复,热修复怎么用,这些网上一大篇博客,本篇博客的内容是 :手写一个Android热修复Demo要手写Demo ,首先需要掌握 两点:反射和ClassLoader。关于ClassLoader,不了解的可以看下上篇博客 Android中的类加载器——ClassLoader。反射知识,可以看下这个博客:Android 插件化开发——基础底层知识(反射), 这里直接贴出我们De...原创 2019-09-28 14:45:44 · 827 阅读 · 1 评论 -
Android中的类加载器——ClassLoader
最近参加了个热修复训练营,其实说起这个训练营,这是偶尔看的广告点进去的。最近一直在学习插件化,其实在我看来热修复和插件化应用的技术挺像的 ,其中都用到的有Android的:类加载ClassLoader。说到类加载机制,其实老早我都想写一篇博客,梳理一下对于ClassLoader,但是总感觉对于ClassLoader理解的不深,深怕出错误导大家,所以一直一拖再拖。说道ClassLoader,首先...原创 2019-09-27 19:35:09 · 963 阅读 · 0 评论 -
Android 插件化开发——获取插件中的资源
之前做的项目是RN的项目,最近在将之前的项目用Android组件化重构一遍 + 白天还得工作。真的是忙的要命,再加上自己十一点之前肯定上床睡觉的“坏习惯”, 没办法只能在中秋节的今天来继续学习插件化。 祝各位小伙伴:中秋快乐!之前学习了宿主APP如何加载插件APK,本篇博客学习:宿主APP加载插件APK的资源。因为我们平时用Activity的居多,并且每个Activity都会调用各种资源,因...原创 2019-09-13 16:35:22 · 1366 阅读 · 0 评论 -
Android 插件化开发——宿主APP加载APK插件
本篇博客说一下我们的宿主APP怎样加载别的APK文件。首先需要说一些知识点,我们的Java文件要想在Android环境运行,需要将.java文件通过转为class文件,然后为了能在DVM上面运行,再转为dex文件。同理反过来,我们在代码中要操作的基本都是class文件,但是class文件怎么来呢? 从DexClassLoader加载获取。DexClassLoader和PathClassLoad...原创 2019-08-22 09:06:50 · 2527 阅读 · 0 评论 -
Android 插件化开发——启动没有在ActivityManifest中声明的Activity(二)
要解决这个问题,首先回顾一下启动一个新的Activity的流程:要启动ActivityB,将要启动的ActivityB信息告诉AMS;AMS收到信息后,记录下ActivityB的相关信息,同时检查Manifest中是否已经注册了ActivityB,如果一切正常,则回传消息给ActivityThread:我接收到了!你可以paused了!ActivityA进入Paused状态,再告诉AMS:...原创 2019-07-27 12:07:48 · 1014 阅读 · 0 评论 -
Android 插件化开发——对startActivity方法进行hook(一)
本篇博客主要讲述一下对startActivity进行hook,对于Android开发来说,跳转一个新的Activity页面,最常见的无非两种了,方法一:Intent intent = new Intent(MainActivity.this, NewActivity.class);startActivity(intent);方法二:Intent intent = new Intent(...原创 2019-07-20 13:58:33 · 723 阅读 · 1 评论 -
Android 插件化开发——基础底层知识(代理模式)
今天周六,接着自我学习插件化,今天学习代理模式,温习一下上一篇博客Android 插件化开发——基础底层知识(反射)关于代理模式,是众多设计模式中的一种,我想说在学习该知识点之前,也是云里雾里,只知道有这个东西,但是具体写代码就GG了,其实Android系统源码里就很多代理模式。为什么需要代理模式?代理类在客户端和目标端起到中介作用,这样可以保护目标端,同时也能够给客户端提供相应的服...原创 2019-06-22 12:23:21 · 537 阅读 · 0 评论 -
Android 插件化开发——基础底层知识(Service)
上一篇我们讲了Context和Activity的相关知识,Android 插件化开发——基础底层知识(Context家族史,Activity启动流程)本篇我们讲述Service的工作流程以及BroadcastReceiver工作流程关于Service的创建启动流程,其实和Activity的创建启动流程是相似的。都是和AMS交互,通信介质是:BinderService工作流程关于S...原创 2019-06-17 22:15:56 · 394 阅读 · 0 评论 -
Android 插件化开发——基础底层知识(Context家族史,Activity启动流程)
通过上一篇Binder以及AIDL的学习,博客最后写了实际上Activity与底层通信模式可以看成是AIDL。不了解Binder以及AIDL的,移步:Android 插件化开发——基础底层知识(Binder,AIDL)这篇博客接着为插件化开发作准备,讲述一下Context家族史以及Activity启动流程Context家族史关于Context,相信并不陌生,但是估计很多初学者都不...原创 2019-06-16 11:13:44 · 512 阅读 · 0 评论 -
BUG : Manifest merger failed with multiple errors, see logs
这个问题出现的前提是:RN项目,前天运行还好好的,昨天运行突然就over了,实在头疼,网上搜了一把,很多说是:manifest资源冲突,但是细看自己的Manifest,确定没有冲突的,就考虑到了,是不是自己RN项目依赖有问题? 又开始了爬坑之路。BUG描述:Caused by: java.lang.RuntimeException: Manifest merger failed with m...原创 2019-06-20 10:49:26 · 3053 阅读 · 0 评论 -
Android 插件化开发——基础底层知识(Binder,AIDL)
最近在学习Android插件化开发,其实最早最插件化开发的理解就是:比组件化开发高一级。抱着提高能力的态度,买了本插件化开发书《Android插件化开发指南》,接下来的博客都将是Android插件化开发的相关知识。通过这几天的学习和查找资料,慢慢的对插件化发生了改变,其实最早插件化做的热修复比较多,也就是线上修复BUG一类的,后来出现了RN以及热修复框架,特别是RN的跨平台。好像AndroidP...原创 2019-06-14 22:02:00 · 698 阅读 · 0 评论 -
Retrofit2.0请求添加头信息,以及解析成DAO
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2017-11-02 19:53:51 · 488 阅读 · 0 评论 -
Android 仿微信图片选择器以及图片预览踩的坑
防微信图片选择器使用的是第三方:compile 'com.commit451:PhotoView:1.2.4'compile 'com.isseiaoki:simplecropview:1.0.13'compile 'com.yongchun:com.yongchun.imageselector:1.1.0'1: Fragment 跳转到Activity页面,onActivityResult方法原创 2017-10-16 16:00:09 · 470 阅读 · 0 评论 -
android 拍照和相册选择照片之后。剪裁图片。
很多APP可能都会实现此功能:从相机或系统相册选择图片,然后剪裁,上传服务器,当作头像。这时,这个demo就派上用场了。 先看下结果图: 相关权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />首先看下定义变量: private Uri uritempFile;//剪裁原创 2017-07-17 15:51:23 · 933 阅读 · 0 评论 -
自定义pickerview实现倒计时
一句话:倒计时 网上也有框架。但是能写的还是用自定比较好。 刚开始我是想自己写的,但是透明度和滑动以及字体之间的比例 把握不好,所以…………..。相信随着知识的增加 有一天肯定能够自己写的! 首先我说一下 这个类是我在网上找的,然后我把里面的注释写了一下,方便各位二次开发; 效果图分两种: 1:isFrom = 1 时: 2:isFrom = 2 时: 先看下核心类:packa原创 2017-06-28 15:22:27 · 354 阅读 · 0 评论