- 博客(41)
- 资源 (16)
- 收藏
- 关注
原创 Android开发知识(二十七)Glide4.x的源码解析(上)
本篇我们会开始对Glide的源码展开分析,对Glide.with(context).load("xx").into(imageview)这个流程去展开分析
2020-12-26 15:45:27 5618
原创 Android开发知识(二十六)强大的约束布局 - ConstraintLayout的用法总结
文章目录前言用法相对定位语句解释运用举例边距(Margin)语句解释bias与居中处理语句解释圆弧定位语句解释举例运行View的尺寸大小语句解释View的尺寸比例语句解释View的最大最小尺寸语句View链语句解释辅助布局GuideLineGroupPlaceholderBarrier结束语前言 在ConstraintLayout出现之前,我们编写布局往往少不了多层嵌套,很多效果需要结合Re...
2019-07-23 16:21:58 8858
原创 Android开发知识(二十五)探索RecyclerView的源码解析与缓存复用机制
文章目录前言RecycleView#onMeasure()LayoutManagerRecycleView#onLayout()RecycleView#onDraw()RecycleView缓存机制RecycleView四级缓存mAttachedScrapmChangedScrapmCachedViewsmRecyclerPoolmViewCacheExtensionRecycleView获取缓存...
2019-04-10 21:16:13 9756
原创 Android开发知识(二十四)自定义ViewGroup:手动实现一个流式布局 - FlowLayout
文章目录前言思路分析继承自ViewGrouponMeasureonLayout结束语前言最近由于项目需求,需要呈现出流式布局的搜索关键词。虽然项目里早已有实现了FlowLayout,但是由于出现了一些计算上的bug,所以我又捋了一遍,这次写到博客上。FlowLayout使用的场景还是挺多的,最常见的就是呈现一些搜索热词的时候了。下面将演示如何实现一个搜索热词的流式布局,最后面会贴出FlowL...
2019-03-15 18:21:46 16521
原创 Android开发知识(二十三)从源码角度分析ListView的滑动复用机制
文章目录前言认识RecycleBin机制ListView的布局方式ListView的元素创建流程ListView滑动加载过程前言ListView作为一个常用的列表控件,虽然现在基本被RecycleView取代了,但是它的内部思想还是很多值得我们学习的地方。既然新出了RecycleView来代替ListView,我们就要摸清他们两个之间的区别。鉴于篇幅关系,本篇先分析ListView的原理。...
2019-03-08 18:30:45 14470
原创 Android开发知识(二十二)LayoutInflater装载xml布局过程的源码解析
文章目录前言LayoutInflater的创建过程LayoutInflater的装载过程标签解析标签解析attachToRoot参数解析View创建过程(1)判断view标签(2) 主题相关判断(3)BlinkLayout判断(4)Factory接口自定义View的创建规则(5)View的默认创建规则(6)View的创建过程ViewStub源码解析结束语前言本篇讲解的是LayoutInflat...
2019-03-07 11:46:27 13870 1
原创 Android开发知识(二十一)基于Hook原理的插件化技术:启动一个未在AndroidManifest.xml中注册的Activity
文章目录Hook作用Hook入口分析准备工作在AMS上做hook入口反射获取ActivityManagerProxy实例动态代理ActivityManagerProxy欺骗AMS权限检查过程还原目标Activity的启动还原目标Activity后遇到的问题利用Instrumentation类做hook入口Hook作用Hook就是利用反射机制动态替换运行过程中的对象,以进行方法拦截(动态代理),...
2019-03-03 22:49:36 14380 2
原创 Android开发知识(二十)Activity的启动过程源码追踪,看看startActivity方法背后干了什么事
文章目录前言涉及到的类如何查看SDK中没有的源文件Activity启动过程源码追踪Activity的冷启动过程启动流程回顾前言我们特别熟悉当Activity需要跳转到另外一个Activity的时候,直接用startActivity就可以了,那么这句代码的背后涉及到什么,本篇将梳理一遍Activity的启动过程,但是由于源码篇幅过多,也比较复杂。没办法一一去解析源码,只能整理清楚这个主要流程。...
2019-02-28 17:28:04 16639
原创 Android开发知识(十九)Android组件化开发架构演示
文章目录组件化前言集中配置版本控制app与 lib模式切换整合lib进主app里解决多个Application问题解决module之间的资源冲突组件之间的跳转与通信方式Activity路由跳转组件之间的数据通信总结组件化前言项目总会越来越庞大,代码总会越来越臃肿,模块与模块之间的耦合,功能模块相互依赖,在不断的迭代修改和新增功能后,造成项目越来越难维护。就好比如一锅粥,不断往里面扔进各种食材然...
2019-02-25 15:25:44 16208
原创 Android开发知识(十八)Sqlite数据库的语法&用法总结
文章目录前言Sqlite 基础用法where 条件子句in语法like语法GLOBLIMIT 和 OFFSETOrder ByGroup ByHAVING子句Distinct 关键字Alter 命令Sqlite高级用法SQLite 约束NOT NULL 约束:确保某列不能有 NULL 值。DEFAULT 约束:当某列没有指定值时,为该列提供默认值。UNIQUE 约束:确保某列中的所有值是不同的。P...
2019-02-22 18:43:27 13755
原创 Android开发知识(十七):LeakCannary-内存泄漏检测与分析
文章目录LeakCannary介绍LeakCannary使用演示LeakCannary在Fragmen中使用LeakCannary检测Object泄漏LeakCannary的 release 版本哪些对象容易造成泄漏分析hprof 文件LeakCannary介绍LeakCannary来自Square开发的一个可视化内存泄漏分析工具,github链接:https://github.com/squ...
2019-01-19 17:22:19 16705
原创 Android开发知识(十六):Android强大的控件-RecycleView使用篇
文章目录使用RecycleView的好处RecycleView的基本用法使用RecycleView的网格布局RecycleView的定位和查找RecycleView的Item增加删除RecycleView实现不同item布局RecycleView实现瀑布流使用RecycleView的好处从Android5.0开始,google给我们带来了一个全新的列表组件,叫做RecycleView。使得ap...
2019-01-17 17:52:41 14575 6
原创 Android开发知识(十五):《EventBus3.1.1源码解析(下篇)》
EventBus前言本文主要讲解EventBus的源码解析,如果您未听过/使用过EventBus的话请自行百度一下,几分钟即可GET到这门技能。如果你还不了解EventBus的Register(订阅)流程,那么我建议你先看看我的上一篇博客: 《EventBus3.1.1源码解析(上篇)》.本篇章讲解的是EventBus的发布流程。同样说明下,我的源码解析是基于EventBus3.1.1的源...
2019-01-14 17:04:10 15674 1
原创 Android开发知识(十四):《EventBus3.1.1源码解析(上篇)》
EventBus前言本文主要讲解EventBus的源码解析,如果您未听过/使用过EventBus的话请自行百度一下,几分钟即可GET到这门技能。EventBus的好处是实现类与类之间通讯的解耦:内部采用观察者模式(发布-订阅模式),该模式可以把发布者和订阅者解耦出来,两者并不需要做直接交互。然而有利有弊,EventBus使用不当则容易造成代码难以解读,很多时候你并不知道观察者会在什么时候接收消...
2019-01-08 11:53:00 16070 1
原创 Android开发知识(十三):再次理清Activcity各个生命周期应该做的事情
从一开始接触Android,我们最早就接触到Activity,接触到Activity的onCreate()。后来我们会去学习Activity的各个生命周期,但是在实际项目中却还是有很多生命周期的问题导致在某些环境条件下会产生和预期不一致的结果。这里笔者整理出几个生命周期的知识点,希望对纠结于Activity生命周期如何做处理的你有些许帮助。...
2018-07-13 18:23:29 21550
原创 Android开发知识(十二):30分钟快速接入微信支付SDK
目录目录一、申请应用二、配置微信支付的SDK三、微信支付流程1、统一下单接口2、APP调起支付接口3、微信支付的回调四、总结一、申请应用1、首先到 [ 微信开放平台官网] 申请注册帐号,这些流程就忽略了到官网一看自然就知道怎么走,感觉在这里没有必要说很多。 2、申请一个移动应用,填写完成你的应用信息。其他的没啥,最主要的是要填对你的签名和包名,...
2018-04-09 16:09:24 19336 4
原创 Android开发知识(十一):让你的应用接入微信分享,完美绕过微信分享的大坑
目录目录一、申请应用二、配置微信分享的SDK三、微信分享示例四、微信分享的结果回调五、微信分享的踩坑总结一、申请应用1、首先到 [ 微信开放平台官网] 申请注册帐号,这些流程就忽略了到官网一看自然就知道怎么走,感觉在这里没有必要说很多。 2、申请一个移动应用,填写完成你的应用信息。其他的没啥,最主要的是要填对你的签名和包名,否则SDK调不起来。包名...
2018-04-08 19:59:57 24924 9
原创 Android开发知识(十)快速接入高德地图SDK(地图+定位+标记+路线规划+搜索)
目录目录申请接入流程显示高德地图显示定位Marker 显示地图标记Route 路线规划Search 搜索申请接入流程高德地图的申请接入流程1、首先到 [ 高德地图API官网] 申请注册帐号 2、进入控制台,点击应用管理,我们创建一个新的应用:3、为刚才创建的应用添加key: 随便输入一个key的名称,这里我们只讨论Android平台,所以...
2018-03-27 14:51:22 28004 5
原创 Android开发知识(九):Android事件处理机制:事件分发、传递、拦截、处理机制的原理分析(下)
在前面的两个章节中,我们已经分析过关于Android事件处理机制的过程,特别是关于View的触摸、点击、长按之间的处理过程的分析,在本章节是我们分析Android事件处理机制的<下>篇,我们将分析关于手指从触摸屏幕到离开屏幕期间,从顶级ViewGroup到View的事件传递过程。
2017-10-18 16:52:59 17270
原创 Android开发知识(八):Android事件处理机制:事件分发、传递、拦截、处理机制的原理分析(中)
在本章节中,我们重点谈论一下onTouch、onClick、onLongClick三个方法被回调的过程。在上一篇文章中,我们谈到关于为View添加一个点击事件SetOnClickListener后,就可以通过回调onClick方法来实现事件的响应。而另外还有一个setOnTouchListener方法,通过设置监听后可以在触摸的时候回调onTouch方法。而我们又说到onTouchEvent方法是处理事件的。
2017-10-17 17:38:54 16278
原创 Android开发知识(七):Android事件处理机制:事件分发、传递、拦截、处理机制的原理分析(上)
在我们刚开始学习安卓的时候,总会一开始就接触到Button,也就是对按钮进行一个事件监听的事件,当我们点击屏幕上的按钮时就可以触发一个点击事件。那么,从我们点击屏幕到按钮触发事件这个过程,是什么样子的呢?本文我们就来谈一下关于事件拦截处理机制的基本知识。
2017-10-16 16:51:58 46264 2
原创 Android开发知识(六)消息处理机制Handler+Looper+MessageQueue的原理分析(下)
在上一篇博文中,我们已经学习过了消息处理机制的基础,对这个过程所涉及到的几个重要的类也有了一定的了解,如果在这方面不清楚也没看过上一篇博文的读者,请点击先阅读《 Android开发知识(五)消息处理机制的基础(Handler+Looper+MessageQueue+Message)》 在这篇博文中,我们来分析这个通信的过程。长话短说,我们直接从handler的sendMessage()一步步说起
2017-08-23 16:46:45 14908 1
原创 Android开发知识(五)消息处理机制Handler+Looper+MessageQueue的原理分析(上)
提到Android的消息处理机制,相信大家并不陌生。因为我们在开发中基本会运用到消息处理,比如在子线程我们做了耗时的网络访问操作,然后通过Handler对象的一个sendMessage()方法就可以在主线程上回调handlerMessage()方法来让我们完成UI的更新。那么,读者是否考虑过这个问题:似乎在这个过程,只涉及到Handler对象,加上Message对象作为消息载体。那这两个线程是怎么
2017-08-23 12:01:17 13157
原创 Android开发知识(四)Android进程间Binder通信机制的源码分析(下)
虽然Android系统是基于Linux内核,但是 它的进程间通信方式并没有完全继承自Linux,它拥有自己独特的通信方式–Binder。通过Binder我们可以进行不同应用与进程之间的相互通信以及远程方法调用。
2017-07-26 17:51:33 12130
原创 Android开发知识(三)Android进程间Binder通信机制的源码分析(上)
AIDL,全称名为:Android Interface Definition Language。它是安卓中一种跨进程通信的实现方式,使得不同进程不同应用之间可以保持通信。 本篇内容为基础使用篇,下面将写一个例子,来实现不同应用进程之间的通信。
2017-07-24 16:29:23 13728
原创 Android开发知识(二):ViewPager切换动画效果的实现
本文主要讲解如何实现ViewPager自定义的页面切换动画效果。通过实现PageTransformer接口,然后利用position在这个过程的变化来动态设置页面的尺寸比例、透明度、以及偏移量。
2017-07-14 09:49:15 11615 1
原创 Android开发知识(一):Activity的生命周期与启动模式
其中,onCreate对应onDestory,onStart对应onStop,onResume对应onPause。onCreate:activity被创建新实例的时候调用,完成一些初始化操作。onStart:activity准备显示但还不能交互。onResume:activity获得焦点,这个状态下才可以进行交互。onPause :正在运行的ac
2017-07-07 17:52:47 13001
原创 你写的单例设计模式真的能保证单例吗?如何防止单例模式下被重复创建
有时候我们想写单例,会类似这样子写: public static class ObjectManager{ public static ObjectManager manager; private ObjectManager() { } public static ObjectManager getInstance() { if(manager==null) { s...
2019-01-26 10:08:37 15492
原创 Android如何计算View的深度
今天在QQ群上,看到大家谈到了一个面试题,就是如何求View树的深度。在我们项目中基本上比较少需要到这个计算,所以可能一下子会蒙圈了。我们知道,Android的视图是一颗树的形式,那么即使关于Android的View树方面很多计算,便可以利用树的原理来计算。谈到树,我们在书本上最常看到的就是二叉树,项目上也有很多关于树的影子,比如有个栏目接口,栏目内容是一层套一层的,那么也是一种树的表现。如...
2019-01-22 17:22:56 17156 1
原创 计算机中减法的实现原理
这本来就是大一的时候就开始学习的,但是之后一直没再接触。一接触但有概念而没有一个清晰的过程,所以再次缕清了后记录一下博客。本文重点阐明了计算机中减法运算的实现以及反码、补码的意义。对于加法来说,计算机很容易实现,举例:8 + 6 = 14;在计算机中,也就是0000 10000000 0110.------------------------0000 11100000 1110表示...
2018-12-09 17:52:38 39078 16
原创 [Android]自定义绘制一个简易的音频条形图,附上对MP3音频波形数据的采集与展现
在项目中需要到数据统计的地方,往往都需要到一些图的展示,比如曲线图、折线图、饼状图、圆形图、条形图等等。在本文中我们来实现一个简易的条形图的绘制。 首先,我们创建一个BarGraphView类,让这个类继承自View,一般重写View都必须重写View的一参构造方法和二参构造方法,如下:public class BarGraphView extends View {public...
2017-10-13 17:00:25 13979 6
原创 [算法]Gale-Shapley Algorithm-稳定匹配算法的设计、实现与探讨(下)
猜想:男生优先匹配问题。优化:算法的空间和时间复杂度。延伸:稳定匹配算法适用于非方阵的数据样本,且每个单位样本都是一个非空集合,即数据不可存在重复。
2017-09-27 19:01:48 18161 3
原创 [算法]Gale-Shapley Algorithm-稳定匹配算法的设计、实现与探讨(上)
一、背景描述 Gale-Shapley Algorithm,简称为GS算法。也被成为Deferred-Acceptance Algorithm. 是盖尔和沙普利为了寻找一个稳定匹配而设计出的市场机制。市场一方中的对象(医疗机构)向另一方中的对象(医学院学生)提出要约,每个学生会对自己接到的要约进行考虑,然后抓住自己青睐的(认为它是可接受的),拒绝其它的。该算法一个关键之处在于,合意的要约不会立
2017-09-27 16:16:16 26189 3
原创 [Android]反编译查看、修改源码、逆向分析以及二次打包签名
本文我们将来探讨关于Android的反编译。通常来说,我们在开发过程中的apk出于DEBUG状态,我们并没有给予APK一个特定的签名,而是编译系统默认给apk一个签名。在发布到应用商城时,我们会用自己的签名文件来签名apk,以防止被其他人恶意篡改apk。当然,我们也会利用Android的混淆技术或者一些加固技术来防止apk被反编译造成源码泄漏。 所以,本文只能针对于没有被签名、混淆、加固过的ap
2017-09-05 18:23:37 28961 2
原创 [Android]解决运行时错误:INSTALL_FAILED_UPDATE_INCOMPATIBLE
首先,出现这个错误,大多数情况下应该是系统没有卸载干净,如果可以在系统设置里面找到应用进行卸载的话,则卸载掉重新运行。不行的话则考虑一下操作: 打开cmd,输入 adb shell 进入adb shell (注意以上命令是基于你的adb只连接了一个安卓终端,如果有多个终端的话,则先输入adb devices,查看所有连接的终端名字,然后再输入adb -s 终端名字 shell即可进入
2017-08-31 17:40:43 27533 2
原创 [Android]在Android TV中实现组合按键的监听触发功能
在手机开发中,我们往往是与屏幕在做交互,而实体按键就寥寥几个。但是在Android TV开发中,按键就用得多了,大多数情况下我们是用遥控器按键来实现与电视的交互。 在Android 开发中,有时候会遇到这么一个需求: 在按下特定的按键序列之后,启动某一个隐藏功能,或者是快捷启动某个东西。 那么我们如何实现这个触发过程呢? 我们通过需求分析,来定义一个接口。接口要定义哪些方法呢? 首先,
2017-08-29 14:39:34 15422
原创 [Android]自定义View实现单独注册某个按键的事件监听
由于最近在Android TV的项目开发中遇到一个问题,需要对某个view进行多次的按键监听,而我们都知道,通过调用setOnKeyListener实现了OnKeyListener接口之后我们就可以实现对按键进行监听,但是却不能够多次注册通过setOnKeyListener来注册其他按键的监听,那么有什么办法做到注册单独某个按键的监听呢?
2017-08-02 16:51:43 15616
原创 [Android]ListView 设置焦点与选中时改变item颜色
平日里工作碰到的问题,现在写下来给自己做一下笔记,有这个问题的朋友也可以看一下。首先,写一个selector.xml 如代码所示,item的状态是如果是焦点选中,那么就是第一个颜色,如果是焦点没有,但是选中状态,那么就是第二个颜色,如果都没有焦点和选中,就是第三个
2017-01-12 18:27:13 16855
原创 android中Activity的onCreate方法里面子线程为何能设置UI界面
如果之前你没有尝试过onCreate方法里面用子线程的run方法去设置UI(比如对Textview进行setText操作)在相信你看到这个标题,也会感到困惑和好奇吧。废话不多说,先来个Demo。protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC
2016-12-28 16:05:58 14881 1
C语言-大数加法
2018-04-16
C++实现稳定匹配算法代码
2017-09-27
android反编译全套工具
2017-09-06
仿今日头条tab展示.zip
2016-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人