- 博客(48)
- 收藏
- 关注
原创 RabbitMq的那些事
放大镜就是直接调用相机,使用放大缩小的功能实现,调用相机有两种方式,一种是直接调用系统的;另一种是自定义相机,需要自定义一个预览界面,下面简单介绍自定义先
2023-04-25 12:04:23
79
1
原创 Rxjava + Retrofit的网络封装
具体的知识点可以看看这篇博客:https://blog.csdn.net/qq_37173653/article/details/789240101,封装retrofit:public class RemoteRepository { public static final int SECCESS_CODE = 1; private static RemoteReposi...
2018-08-23 16:24:44
236
原创 Android 签名大解
前言: 开发一个android项目,签名是必须需要学会的,好在android studio 已经强大到你只需选择几下就可以搞定签名文件,接下来我总结一下大体的签名步骤吧!(图片是共享同仁的图片,哈哈哈,别像我这么懒)1.keystore.jks文件生成,打包APK选择Build > Generate Signed APK 出现如下弹框:然后点击Create new...(创建的意思)出现...
2018-05-02 11:20:47
468
原创 Android Studio 3.0及Gradle Plugin 3.0升级过程中踩到的那些坑
前言: 2018转眼已经过去一快小半年,堕落了很长一段时间,觉得回到家乡小地方,没有了追求技术的热情。直到前段时间跟以前的同事聊的过程中发现自己已经脱离正轨了。虽然不再北上广深了,但是技术还是得靠自己去折腾。也许有一天回过头来看看,自己曾经那么爱android是吧。哈哈。废话不多扯了,直接进入今天要给大家带来的唠嗑。正题:大家都知道Android已经到android8了,开发工具也持续更新到An...
2018-04-28 16:32:48
926
原创 RxJava2的do系列操作符之doOnNext和doFinally
1.doOnNext 它产生的Observable每发射一项数据就会调用它一次,但是它的Action不是接受一个Notification参数,而是接受发射的数据项。Observable.just(1, 2, 3) .doOnNext(new Action1<Integer>() { @Override public void call(I
2017-10-24 14:42:34
9282
原创 比较两个list集合是否相等
方法: 1,先比较size是否相等 2,在size相等的基础上在逐个比较元素 public synchronized <T extends Comparable<T>> boolean compare(List<T> a, List<T> b) { if (a.size() != b.size()) return false;// Co
2017-10-24 11:52:01
4686
1
原创 全面剖析Rxjava2.0的前世今生
引言 随着项目的不断壮大,我们的业务越来越复杂,引入RxJava框架是迟早的事,这段时间正好花了几天时间来认真学习了Rxjava一把,好记性不如烂笔头,还是乖乖记录下来学习的所得所感。一 、Rxjava2.0的前世1. Rxjava是什么? 查阅了好多文档后,我给Rxjava的定义是这样子的:Rxjava就是在观察者模式的骨架下,通过丰富的操作符和便捷的异步操作来完成对于复杂业务的处理。即两个核
2017-07-31 15:14:40
3838
2
原创 从源码角度来剖析Rxjava的运行原理
引言相信网上关于Rxjava的文章数不胜数,但是我不知道初学者有没有跟我一样觉得好迷茫,似懂非懂的样子真的很让人崩溃,对于我而言,要学一个东西,我就要真真正正把它给学会,学懂,所以我一定要弄懂RxJava是怎样运行的,只有弄懂它是怎样跑起来的,咱们后面才知道怎么写代码,怎么用好它,so,在这里我并不是告诉你怎么去用Rxjava,因为我也是刚学,但是我决定一步步来,把每天的学习记录下来。这里先讲的是R
2017-07-21 17:35:41
819
原创 深入浅出剖析MVP架构模式
引言MVP模式在Android开发领域上据说有着举足轻重的地位,其热度持续发烧,有增无减。作为一名android搬运工,对于mvp架构,我曾经也是一头雾水,这几天才认认真真学习了一把,所以决定把自己所学到的知识整理出来,希望对跟我一样之前不是很懂MVP架构的伙计有一点帮助。相信很多码农都有这样子的习惯,不喜欢看理论,一来就奔代码去,我在这之前也是这样子的,但是有位前辈指导我,要先了解一些架构的思想再
2017-07-03 22:43:31
841
原创 从源码角度上探索AdapterViewFlipper怎么实现广告栏的垂直自动滚动
一,从源码上认识AdapterViewFlipper 我不知道大家有没有跟我一样,看到别人的app一些比较好的交互时,总是好奇别人是怎么实现的,如果是换做自己,我哦该怎么实现。最近在做一个横向轮播的视频展示需求,我们知道viewpager是可以很容易实现横向滚动的,那么很多app上的一些广告栏是垂直滚动的,比如京东,淘宝,一些招聘的app都有。那么别人是在怎么实现的呢。方式有很多中,如果只是简
2017-06-28 16:33:12
811
原创 Android “+”号发散菜单动画的实现--- pathMenu的实现思路
一,引言最近有需求,需要开发类似淘宝“问大家”进去中间那个“+”号Tab,点击散发出两个菜单按钮的动画,大概效果如下: 然后点击“+”做发散动画,效果大概如下 对于这样子的动效是很多主流app都在做的,那么我们应该怎么做呢?二,那么怎么实现这个动画呢下面让我来讲讲要怎么实现这样子的pathMenu动画 先借助前辈的一张图来讲讲扇形原理: 这款扇形菜单实现的也是非常的好,提供半径 radi
2017-06-21 11:31:40
1541
3
原创 Activity之onActivityResult与setResult
在Android app开发当中,我们经常会遇到几个activity之间的跳转问题,比如A跳转到B,然后B跳转到C,然后点击C的某一项要回到A,这就存在各种数据传值的问题,今天我们就来掰扯这些activity之间的爱恨情仇。一、方法简介android Activity之间的跳转不只是有startActivity(Intent i)的,startActivityForResult(Intent int
2017-06-07 11:53:07
1563
原创 标签栏TabLayout与ViewPager的那些事
一,引言上图是简书Android端的主页Tab,在其他的App中Tab也是很常见的,它的实现方式也有很多:TabHost,自定义控件(第三方库),RadioGroup等等。这里主要介绍Android Design库中的TabLayout的使用。TabLayout和ViewPager配合使用是最常见的运用方式,比如上图所示,接下来我们一一攻破!二,TabLayout的属性介绍我在这里就不那么废话的跟大
2017-05-26 16:54:53
2238
原创 Android调试应用命令式技巧
在应用开发中,我们常常会进行日志打印或者debug调试,以此来分析运行时的一些信息,便于发现bug和问题。Android Studio的Debug功能很好用,但是有时候有些情况下,就显得不是那么快捷和便利。 比如:我们调试的点在应用一打开的时候,很靠前,例如Application的onCreate方法中,以至于我们不能足够快的设置进程为debug模式虽然上面的情况可以通过Android Stu
2017-05-15 17:39:10
411
原创 浅谈Android中的json解析
引言 对于一个App开发的Android 开发者而言,json解析算是家常便饭吧,json可以说整个app的地基,时刻都在支撑着我们的app的各种交互。那么,json在Android应用中到底是什么,扮演着怎么样的角色,下面就跟着我一起去揭开json的神秘面纱吧。## 一,json是神马东东 ## json其实就是一种轻量级的文本数据交换格式,是JavaScript Object Notat
2017-05-15 17:08:40
586
原创 列表式弹窗
private void showTakePictureDialog(String[] strs) { SingleListDialog listDialog = new SingleListDialog(activity); listDialog.setTitleVisible(false); listDialog.setListEntries(st
2017-05-11 16:20:43
333
原创 华为手机7.0以上华为7.0上popwindow位置显示错乱,飘
由于测试手机上华为meta8,升级了7.0以后突然popwindows显示位置往上飘了, 其他机型没啥问题,一直没找到原因?后来看到一个连接?https://code.google.com/p/android/issues/detail?id=221001原来是 in showAtLocation failed to no gravity 在7.0上没有工作解决方法是: if (android.
2017-04-21 16:15:34
4421
原创 支持富文本插入图片,文本的自定义View
在比较潮流的App中,我们经常看到富文本的身影,能支持图文混排,其实图文混排不是那么难,这段时间由于项目的需要,我自己实现了图文混排,即能支持插入图排,又可以编辑文本。其实原理很简单,把ImageView跟EditText动态加入一个layout容器里面,然后根据最近的焦点来添加view,具体请看我的view,里面已经注释很清楚了。public class RichTextView extends
2017-04-17 18:14:01
1463
原创 Android 常用的时间工具类
Android 常用的一些工具类1.时间对象转换成字符串public static String date2string(Date date) { String strDate = ""; SimpleDateFormat sdf = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS); strDate = sdf.fo
2017-04-17 15:46:57
448
原创 Dagger2从使用到原理剖析
有没有像我这种从系统转应用的开发,做系统几乎都不需要跟框架打交道,但是呢,做应用,那这些开源框架就不得不天天见面了。我相信很多都会跟我一样,网上很多Dagger2的文章,但是都云里雾里,似懂非懂,所以我决定再忙都要把我的学习过程分享给大家,血泪总结啊! 对于Dagger2,我觉得最好先弄懂依赖注解是什么个意思,然后再来看看Dagger2,它跟ButterKnife还是有一定的区别的。注解并不是我要
2016-12-30 17:53:39
1405
原创 从源码上剖析AsyncTask
一、AsyncTask基本介绍一般情况下,Android只能在主线程中更新UI,子线程要更新UI,就需要借助Android的异步消息处理机制。不过为了更加方便我们在子线程中更新UI元素,Android从1.5版本就引入了一个AsyncTask类,使用它就可以非常灵活方便地从子线程切换到UI线程。二、AsyncTask的基本用法首先来看一下AsyncTask的基本用法,由于AsyncTask是一个抽象
2016-11-26 13:16:11
308
原创 悬浮按钮FloatingActionButton控件
相信作为Android开发者,对FloatingActionButton肯定很熟悉,我们也经常看到它的身影,比如短信页面,电话页面等等。那么我们应该怎么引用悬浮按钮呢?下面就来分析分析FloatingActionButton的使用。1.先导入support依赖库由于FloatingActionButton是在开源库里面的,所以我们要先导入开源库。 (1)先配置build.gradlegradle版
2016-11-22 16:59:57
4002
翻译 异常信息接收器CrashWoodpecker
在写APP应用的时候经常会遇到某个Activity出问题而导致APP崩溃,而Android Studio 自带的 logcat 并没有搜集到异常信息,特别是对于那种 “启动崩” 的异常, 很难马上捕捉到, 丢失也是经常的。当开发过程中, 如果有没有处理的异常导致 crash, 使用了 CrashWoodpecker 以后, 便会起一个新的美观页面, 以很友好的方式即时展示异常信息。这对于查看错误信息
2016-11-22 16:00:18
910
原创 盲人辅助模式Accessibility剖析
现在很多的App都有考虑到要适配一些特殊人群,不如盲人,对于盲人模式这个辅助功能的适配,参考Google官方文档:http://developer.android.com/intl/zh-cn/guide/topics/ui/accessibility/apps.html ,下面是我在研究盲人模式开发中的一些总结,希望对有需要的人能够起到一定的帮助作用。一、常见的需求场景1、描述用户界面控件:为没有
2016-11-22 15:08:57
8531
原创 Mutildex解决Android应用Dex方法数限制
作为一个Android开发者,在开发应用时,随着业务规模发展到一定程度,不断地加入新功能,添加新的类库,代码在急剧的膨胀,相应的APK包的大小也在相应地增加。那么可能有一天,你的应用会抛出这样一个error信息:Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536这
2016-11-22 10:35:10
2312
原创 从源码上剖析Android内存泄露工具LeakCanary
内存泄露在开发过程中我们会经常遇到,分析内存泄露的工具经常会用到Heap Tool 与 Memory Analyzer tool(MAT)。Heap Tool可以查看当前的内存快照,从数据里可以看到当前内存的占用和回收情况,每次垃圾回收这里的数据都会更新,因为会不断获取内存数据刷新显示,所以这时候对应用操作会出现卡顿。 Heap Tool提供的是一个内存的总体情况,图表显示的内容比较简单,如果要具体
2016-11-21 18:05:04
1409
原创 Android 引发内存泄漏类型总结
内存泄露在开发过程中我们会经常遇到,分析内存泄露的工具经常会用到Heap Tool 与 Memory Analyzer tool(MAT)。Heap Tool可以查看当前的内存快照,从数据里可以看到当前内存的占用和回收情况,每次垃圾回收这里的数据都会更新,因为会不断获取内存数据刷新显示,所以这时候对应用操作会出现卡顿。 我们一直在说内存泄漏,那么到底什么才是内存泄漏呢?接下来我把我在开发过程中遇到的
2016-11-21 17:50:34
312
原创 Android Handler引起的内存泄漏分析与解决
在开发中我们经常用Handler来进行子线程修改UI界面,进程间通讯等等,在用的过程中稍不注意就有可能发出handler leaks的警告,即“This Handler class should be static or leaks might occur ..”的警告。Google给出的解释如下:Issue: Ensures that Handler classes do not hold on
2016-11-21 14:37:13
528
原创 从源码上剖析Android View绘制Drawable的原理
一、引言对于Drawable,相比每个Android 开发者都无比熟悉,在开发过程中我们经常setBackground设置背景,那么对于Drawable你了解多少呢?对于View是怎样把Drawable绘制出来又了解多少呢?对View根据不同状态绘制不同的背景又了解多少呢?也就是我们经常使用的selector,今天我们从源码上来深度剖析这些原理,从本质上卸下Drawable的神秘面纱。二、背景介绍在
2016-10-27 17:35:10
1688
原创 从源码上深度剖析View invalidate 、 postInvalidate、requestLayout
对于Android View的自定义来说,这三兄弟简直是我们必须要拿下的坎,那么这三个方法有什么本质上的区别呢? 我个人认为要从本质上来认识这三者的区别,那么你肯定要对Android View的绘制流程了如指掌。首先我们先来看看View 的绘制流程: 从上面View的绘制流程图上我们对invalidate 、requestLayout会触发哪些流程一目了然。 接下来我们用源码的角度上来
2016-10-26 20:42:54
748
1
原创 Android WebView探索
一、引言WebView(网络视图)作用相当于一个迷你的浏览器,采用Webkit内核,因此完美支持html,javascript,css等。有时候,我们完 全可以把UI甚至数据处理都交给WebView,配合PHP等服务端程序,这样Android开发就变成了网页开发,可以省很多精力。目前很多android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出
2016-10-24 14:56:22
349
原创 WindowManagerService如何管理应用程序窗口
一、引言如果对于Android窗口视图是怎么显示的还不是很清楚的话,可以看看我上一篇博文Android视图渲染过程分析,我们已经知道每一个Activity组件都有一个对应的ViewRoot对象、View对象以及WindowManager.LayoutParams对象。这三个对象的对应关系是由WindowManagerImpl类来维护的。具体来说,就是由WindowManagerImpl类的成员变量m
2016-10-24 11:31:16
779
原创 Android 视图渲染过程的源码分析
我相信大部分Android开发工程师都知道通过 setContentView(@LayoutRes int layoutResID)就可以把自己layout布局文件的视图结构显示出来。但是鲜有人去研究Android系统是怎么把这些视图给渲染显示出来的。由于工作的需要,我尝试过很多次去研究,去探索。但不可否认这个过程很痛苦,很头疼。看FrameWork层源码无疑是最头疼的,但是没办法,这是工作的重中之
2016-10-21 17:57:29
1816
原创 Android启动Activity的方式原理分析
一.启动 Activity 的分类 在android 种启动4大组件的方式有很多种,但是不管再多,都从调用方式上分为以下2种: 1、显示调用(Intent显示跳转) 显式调用明确指定了调用的组件名称,对于显式调用的Intent,称之为“显式Intent”,如下面的例子: (1)同一个应用程序中的Activity切换 Intent intent =
2016-10-21 16:10:26
714
原创 从源码上分析Android View保存数据状态
在Android开发旅途中,经常会遇到系统控件无法满足我们的视觉,交互效果,这个时候我们常常需要自己自定义控件来满足我们的需求。在这个开发探索过程中,我们不可避免得遇到View要保存状态信息这样的问题。刚开始接触控件自定义开发的时候,我自己也搞不懂要怎样保存当前数据,如果没有对当前状态数据进行保存,那么如果一不小心旋转一下手机屏幕或者按下back,那么控件又回到初始化状态,之前所有的输入都已经不存在
2016-10-20 16:33:54
937
原创 EventBus源码分析
在进入EventBus源码分析之前,如果对EventBus的使用还不是很清楚的,可以参考上一篇文章EventBus使用 首先我们先通过一张简单的图来了解一下EventBus的工作原理: EventBus工作原理图: 也可以看这张图: 当然作为一名Android开发人员,我们肯定是想更深入地了解EventBus是怎么工作的,所以探讨源码是必不可少的。所以我们将进行EventBus源码的
2016-10-18 18:18:23
399
原创 EventBus基本使用简介
一、背景介绍 在编程过程中,当我们想通知其他组件某些事情发生时,我们通常使用观察者模式,正式因为观察者模式非常常见,所以在jdk1.5中已经帮助我们实现了观察者模式,我们只需要简单的继承一些类就可以快速使用观察者模式,在Android中也有一个类似功能的开源库EventBus。 此篇幅主要讲述EventBus是什么?EventBus可以帮助我们干些什么?还有EventBus是怎样调用的?下一篇幅将
2016-10-18 16:01:20
411
原创 Android 中的贝塞尔曲线分析详解
什么是贝塞尔曲线,贝塞尔曲线有什么用?贝塞尔曲线是应用于二维图形应用程序的数学曲线。 曲线定义:数据点(起始点、终止点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。一句话概括贝塞尔曲线:将任意一条曲线转化为精确的数学公式。在我们Android开发的殿堂中,有很多比较炫的效果都是通过贝塞尔曲线来画出来的。下面让我们一起来揭开贝塞尔曲线的神秘面纱! 数学中的贝塞尔曲线 一阶
2016-10-17 19:31:10
690
原创 由动画Animator.end()引发的问题总结
最近在工作过程遇到过一个关于调用Animator.end()方法引发的Bug,下面让我来说说是怎么回事。 在开发过程中,由于一些业务或者需求功能的需要,我们经常需要在某些环节中同时或者连续播放多个动画,这是我们一般会new 一个AnimatorSet来做此类工作,比如常见的方式如下所示:AnimatorSet mSet = new AnimatorSet();ValueAnimator anima
2016-10-17 16:53:18
7170
原创 Android 放大镜效果实现
放大镜就是直接调用相机,使用放大缩小的功能实现,调用相机有两种方式,一种是直接调用系统的;另一种是自定义相机,需要自定义一个预览界面,下面简单介绍自定义相机方式: 首先我们需要申请权限: 1、获取需要的权限,检测手机是否有相机。//manifest里添加使用相机的权限<uses-permission android:name="android.permission.CAMERA" />//使用
2016-10-17 16:23:55
940
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人