自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (32)
  • 收藏
  • 关注

转载 【无标题】

我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 。而最近这几个月,我也发现国内越来越多的人开始提及 RxJava 。有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: RxJava 到底是什么?鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用过程中对 RxJava 有了一些理

2022-07-14 15:06:32 133

原创 Android稳定性优化

要保证稳定性,需要保证减少crash和anr,对于减少crash,需要进行代码审核,但是人工审核难免也会漏掉,可以使用FindBugs(当前已经被SpotBugs替代),CheckStyle,PMD,Android Lint,可以使用这几种工具对代码进行检测FindBugs,PMD 主要是侧重于检测代码缺陷CheckStyle 主要规范代码风格Andriod Lint 是全方位的检查,...

2019-12-12 22:56:24 550

原创 Andriod APK体积优化

随着项目的不断迭代,功能越来越多,构建出来的apk文件的大小也会越来越大,这样会导致在移动网络情况下下载时,使用的网络流量会增大,并且apk太大,导致下载的时间也增加,虽然当前每个人的手机的流量都很多,对用户流量影响不大,但是据一些网站统计,安装包越大,用户的转化率是在降低的,所以减少apk的体积,可以让更多的用户愿意去下载和体验产品。所以,对apk体积进行瘦身还是很有必要的。在对apk体积进行瘦...

2019-12-09 14:23:56 666

原创 Android存储优化

关于存储的操作,一切的核心优化都在以下三个方面:1.避免在主线程I/O2.减少I/O读写量3.减少I/O的操作次数从这三个方面,下面介绍如何针对不同的存储方式进行相应的优化:针对SharedPreferences,需要做到如下的优化:SP文件没有被加载到内存时,调用getSharedPreferences方法会初始化文件并读入内存,建议在Application中初始化,重写at...

2019-12-05 08:57:07 281

原创 Glide 4.x和3.x区别和使用介绍

基础使用添加4.x版本的依赖implementation 'com.github.bumptech.glide:glide:4.4.0'annotationProcessor 'com.github.bumptech.glide:compiler:4.4.0'相比于Glide 3,这里要多添加一个compiler的库,这个库是用于生成Generated API的。使用:Request...

2019-11-29 10:38:47 1174

原创 Glide添加图片下载进度监听

对于项目开发中,如果遇到加载大图,重网络上下载并在本地显示这个大图,会稍微耗时一点,这时,就会想给出一个下载进度的显示,这样用户体验会更好,但是Glide是没有提供下载进度监听的api的,为了解决这个问题,这篇文章的介绍将基于上篇文章 中,对Glide的自定义模块时,使用Okhttp替换了默认的HttpUrlConnection作为网络情况的组件。基于这个OkHttp,可以通过添加拦截器的方式来...

2019-11-28 23:42:28 1519

原创 Glide自定义模块

通过自定义模块,可以灵活配置内存缓存的大小,磁盘缓存的大小,磁盘缓存的地址,以及异步请求的的线程的数量,BitmapPoll缓存的大小,网络请求的组件等。由于Glide本身就已经默认对这些进行了配置,并且这些配置也是非常合理的,但是,没个项目都可能有自己的特殊需求,如果能够自己定制模块,更改这些默认配置,则就能够满足项目的特殊需求,下面来看看如何自定义模块。其实自定义模块很简单,只需要定义一个类实...

2019-11-28 15:29:11 1072

原创 Glide的图片转换

前面几篇文章介绍了Glide的基本使用,源码分析,和高级使用,这篇文章继续介绍|Glide的高级使用方法,自定义图片转换,其实Glide是默认的实现了几种图片转换的。比如DrawableRequestBuilder类的fitCenter()和centerCrop()方法其实就是对图片进行了转换。在介绍如何自定义图片转换前,先来看看Glide自身提供的图片转换的使用。1.首先准备一个布局文件,在布...

2019-11-27 16:43:06 637

原创 Glide的高级用法

自定义的target上篇文章在分析Glide.with(this).load(url).into(iv);这行代码的源码过程中,在分析到into方法时,这个into(ImageView view)方法其实GenericRequestBuilder的into方法。这个into(ImageView view)方法又调用了GenericRequestBuilder类的into(Y target)方法,...

2019-11-26 21:29:43 2043

原创 Glide源码分析

Glide的常用方式:Glide.with(this).load(url).into(iv);通过这一几个链式调用的方法就完成了从网络上加载一个图片在本地显示的功能,下面分析一下,内部的具体实现逻辑:首先看看Glide.with()方法:public class Glide { ... public static RequestManager with(Activity ac...

2019-11-25 18:51:56 234

原创 Glide基本使用

glide使用:第一步:添加依赖:dependencies { compile 'com.github.bumptech.glide:glide:3.7.0'}第二步:添加权限<uses-permission android:name="android.permission.INTERNET" />第三步:Glide的常用方式:String url = ...

2019-11-21 17:40:26 746

原创 Android 常用图片框架对比

在Android中,进行内存优化,最重要的优化处理是对图片进行内存的优化处理,毕竟图片占用的内存是非常大的,对于图片的内存处理,是android中内存优化的重中之重。目前开源的4大图片处理框架都对图片的内存方面处理都是非常优秀的,但是对于这么多的框架,如何选择适合自己项目需求的框架,就需要先了解每个框架的特性,下面就来分析一下每个框架的特点。Universal-Image-Loader(UIL)...

2019-11-20 17:51:38 1648

原创 LruCache原理

对于Android的内存优化 ,特别是图片的优化,当使用内存缓存时,一般很容易想到是用LruCache,下面分析下LruCache的使用原理。在分析原理之前,请务必注意分析的LurCache源码的是哪个包下的,不同Android api下的LruCache的源码有些不同,主要是不同版本的LruCache类中的trimToSize方法写的不同,导致笔者在分析时,感觉其中的逻辑矛盾,走了不少弯路。...

2019-11-15 15:35:00 412

原创 LeakCanary原理解析

上篇文章Leakcanary的使用演示了LeakCanary的使用,这篇文章分析下,LeakCanary(基于1.6.1版本)的原理。在使用LeakCanary时,需要在自定义的Application中,调用LeakCanary.install(this);下面看看LeakCanary类的install方法的具体实现:#LeakCanary.javapublic final class Lea...

2019-11-14 18:08:29 249

原创 Android优化之内存优化一:检查内存泄漏工具使用

内存优化,不仅可以减少OOM,还可以减少GC的频率,GC频率减少后,这样就会使应用使用更加流畅。减少内存占用,可以提高应用在后台运行时的存活率。当然还可以减少异常的发生和减少代码的逻辑隐患。所以进行内存优化是非常有必要的。在进行内存优化之前,需要先了解对象在内存中的生命周期以及垃圾回收的原理,可以参考Java虚拟机部分知识点,因为内存优化过程中,涉及到了内存泄漏的排查,这个排查过程,就需要了解对...

2019-11-13 19:08:40 194

原创 Android Studio 3.4中Memory Profiler工具使用

Memory Profiler 是 Android Profiler 中的一个组件,可帮助您识别可能会导致应用卡顿、冻结甚至崩溃的内存泄漏和内存抖动。它显示一个应用内存使用量的实时图表,让您可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。要打开 Memory Profiler,请按以下步骤操作:依次点击 View > Tool Windows > Profiler(您也可以点击...

2019-11-07 16:12:17 2662

原创 常见内存泄漏案例及解决方案

内存泄漏产生的原因: 一个长生命周期的对象持有一个短生命周期对象的引用,通俗点讲就是该回收的对象,因为引用问题没有被回收,最终会产生 OOM。内存泄漏的常见场景1.非静态内部类的静态实例持有外部类的实例的引用。代码举例:public class InnerClassLeakActivity extends AppCompatActivity { private static Le...

2019-11-07 13:34:35 833

原创 Leakcanary的使用

LeakCanary是Android查找内存泄漏的主要工具,由Square公司开发,可以直接在手机端查看内存泄露的工具。其使用方法如下:第一步: debugCompile 'com.squareup.leakcanary:leakcanary-android:1.6.1' releaseCompile 'com.squareup.leakcanary:leakcanary-and...

2019-11-06 16:53:26 781

原创 Android 绘制优化

绘制原理View 的绘制流程有3个步骤,分别是measure 、layout 和draw ,它们主要运行在系统的应用框架层,而真正将数据渲染到屏幕上的则是系统Native层的SurfaceFlinger服务来完成的。绘制过程主要由CPU来进行Measure 、Layout 、Record 、Execute的数据计算工作, GPU负责栅格化、渲染。CPU 和GPU 是通过图形驱动层来进行连接的,...

2019-11-06 00:19:54 235

原创 Apk安装之——PMS解析apk过程分析

在android的apk安装过程中,PMS会调用installPackageLI方法对apk进行解析,下面看看这个方法的具体实现:http://androidxref.com/9.0.0_r3/xref/frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.javaprivate voi...

2019-11-04 14:32:36 528

原创 Apk安装之——PMS安装apk过程分析

上篇文章Apk安装之——点击安装确认页面的确认按钮,到将安装过程交给PMS的过程分析分析到apk安装的流程,交给了PMS,这篇文章继续分析,PMS是如何安装apk包的。首先调用PMS的installStage进行安装。下面看看这个方法:http://androidxref.com/9.0.0_r3/xref/frameworks/base/services/core/java/com/andr...

2019-11-01 14:51:27 889

原创 Apk安装之——点击安装确认页面的确认按钮,到将安装过程交给PMS的过程分析

上篇文章Apk安装之——安装确认页面的初始化,讲解了apk包安装的一个小的阶段,展示安装确认页面的过程。这篇文章,继续分析,点击这个页面的确定按钮,开始安装apk的过程。下面是触发点击事件的具体代码:http://androidxref.com/9.0.0_r3/xref/packages/apps/PackageInstaller/src/com/android/packageinstalle...

2019-10-31 11:25:15 1422

原创 Apk安装之——安装确认页面的初始化

APK的安装场景主要有以下几种:通过adb命令安装:adb 命令包括adb push/install,没有安装界面用户下载的Apk,通过系统安装器packageinstaller安装该Apk。packageinstaller是系统内置的应用程序,用于安装和卸载应用程序,有安装界面。系统开机时安装系统应用,没有安装界面。电脑或者手机上的应用商店自动安装,没有安装界面。apk的四种安装方...

2019-10-30 22:54:10 5707

原创 Android so文件的加载原理

先说说so的编译类型Android只支持3种cpu架构分为:arm,mips,x86,目前用的最多的是arm体系cpu,x86和mips体系的很少用到了。arm体系中,又分32位和64位:armeabi/armeabi-v7a:这个架构是arm类型的,主要用于Android 4.0之后的,cpu是32位的,其中armeabi是相当老旧的一个版本, 缺少对浮点数的硬件支持,基本已经淘汰,可...

2019-10-29 17:46:45 2190

原创 Android apk打包流程,混淆,差分包的生成和合并新的apk

Android apk打包流程:通过aapt工具,将manifest文件编译后,生成manifest.java文件,为res目录下的资源生成R.java文件并使用aidl工具,将aidl文件生成相应的java文件通过javac工具,将项目中的业务逻辑的java文件,和前面生成的java文件编译成class文件proguard混淆,同时生成proguardMapping.txt文件,这一步...

2019-10-29 10:12:59 2812

原创 Android 插件化之—— 加载插件中的资源

Android 资源分类:res目录下的资源res目录下的资源可以通过Resource对象进行访问,通过分析Resource源码可知,Resource访问res目录下的资源其实还是调用的AssetManager类的方法访问的。assets目录下的资源assets目录的访问,通常在Activity中,是获取到AssetManager对象后,使用AssetManager来访问asset中的资...

2019-10-28 14:50:42 1611

原创 Android 插件化之——给插件中的ContentProvider发送请求

ContentProvider的插件化,可以借鉴静态广播的思路,在宿主中创建一个代理ContentProvider,第三方的app向插件中的ContentProvider发送增删改查数据的请求,都先找宿主的代理的ContentProvider,代理的ContentProvider在将实际的增删改查的请求转发给插件中的ContentProvider。这就是ContentProvider插件化的基本思...

2019-10-27 11:12:57 404

原创 Android 插件化之——给插件中的静态注册的BroadcastReceiver发送广播

为了演示静态广播的插件化,我们首先想到的也是使用类似Activity的占坑方案,但是,由于广播的action是不确定的,就无法确定占坑的广播的action,这样就无法使用在宿主中预先使用占坑广播的方案,还有一点,就是,静态广播是在apk安装时就被PMS解析,并将manifest文件中的关于四大组件的配置信息都保存起来,当然也包括了广播的信息。由于插件apk是没有被安装的,所以,插件apk中的静态...

2019-10-24 17:20:28 459

原创 android 手动分包,将指定class打包到主dex中

插件化开发时,想要使app启动很快,需要将主dex中只是包含首页以及基础模块的功能,其他的功能放到从dex文件中,这样就可以加快app的启动速度。那如何将核心首页以及基础模块的class文件打包到主dex文件中呢?下面来实现这个过程。1.首先要是项目支持multidex,要是项目支持multidex,需要完成下面两个步骤a.需要在module级别的build.gradle文件中配置andro...

2019-10-24 11:44:24 5611 4

原创 Android 插件化之——给插件BroadcastReceiver发送广播

广播从注册方式上可以分为静态广播和动态广播。他们的区别如下:静态注册的广播,需要在manifest文件中声明,这样,在应用的apk包安装时或者Android系统重启时,PMS(PackageManagerService)就会解析apk的manifest文件,并将这些信息保存起来,所以,静态注册的广播是保存在PMS中的。动态注册的广播是通过代码在程序中注册的,通过调用Context类的re...

2019-10-22 20:00:54 284

转载 android:exported、enabled属性

android:exported:android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。代表是否能被其他应用隐式调用。如:在Activity中,该属性用来标示,当前Activity是否可以被另一个Application的组件启动:true允许被启动;false不允许被启动。在Ser...

2019-10-22 16:14:07 2013

原创 Android插件化之—— 绑定和解绑插件Service

上篇文章Android 插件化之——启动和停止插件Service讲解了启动插件service的演示,这篇文章,继续绑定插件service和解绑插件service的演示。和上篇启动插件service的原理类似,也是使用代理转发,通过Hook AMS,在AMS的bindService方法中,将要启动的插件service变换成代理service,这样绑定的其实就是代理service,然后将插件servi...

2019-10-22 14:49:11 570 3

原创 Android 插件化之——启动和停止插件Service

由于启动service后,再次启动这个service时,是不会再次创建这个service的实例的,所以,如果有多个插件service要启动,如果只是按照启动插件activity的思想,只使用一个占坑的service,是不能满足需求的,因为,按照启动插件activity思想,每次启动一个插件activity,如果启动的activity是标准启动模式,则每次都会创建一个新的activity,而serv...

2019-10-21 15:42:52 767

原创 Android 启动插件Activity的原理以及案例演示

当应用的apk文件安装到手机系统时,这个文件会被解压后存储到data/dalvik-cache 这个目录下,当app应用程序启动时,如果app所在的进程未创建,则会通过Zygote进程去fork一个子进程作为要启动的app的进程,并创建PathClassLoader。app进程启动后,会通过通过ClassLoader来完成dex文件的加载。PathClassLoader是继承BaseDexClas...

2019-10-16 23:05:23 451

原创 代理模式

概述代理模式是结构化设计模式中的一种,平时我们生活中都有类似的代理模式,比如代购,网上购物,打官司。定义:为对象提供一种代理以控制对象的访问,这种方式就称为代理模式。代理模式的结构图中,Subject:抽象主题类,声明真实主题的共同接口方法。RealSubject:真实主题类,定义了代理所表示的对象。客户端通过代理类间接的调用真实主题对象的方法。Proxy:代理类,持有真实主题的类的...

2019-10-12 11:57:11 287

转载 java泛型中 ? 和 T 有什么区别

java泛型中 <?> 和 有什么区别T 代表一种类型加在类上:class SuperClass{}加在方法上:public void fromArrayToCollection(T[] a, Collection c){}方法上的代表括号里面要用到泛型参数,若类中传了泛型,此处可以不传,调用类型上面的泛型参数,前提是方法中使用的泛型与类中传来的泛型一致。class Pe...

2019-10-11 14:11:44 96

原创 Java虚拟机部分知识点

概述我们常说的JDK(Java Development Kit)java开发工具包,它是包含JRE(Java Runtime Environment)和开发工具和Java语言,而JRE又包含Jvm和核心类库。下面是三者之间的关系:JDK java development kit java开发工具包JRE java runtime environment java运行环境JRE = ...

2019-10-10 15:57:01 346

转载 Lambda表达式详细总结

转载:https://blog.csdn.net/wangboxian/article/details/41963205(一)输入参数在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大于或者等于2时,Lambda表达式左边的一对小括弧中的多个参数质检使用逗号(...

2019-10-09 10:02:30 4109 3

原创 Android 9.0 ContentProvider的启动过程分析

ContentProvider主要用于对外共享数据,也就是通过ContentProvider将应用中的数据共享给其他应用访问。这样其他应用就可以通过ContentProvider来访问指定应用中的数据。ContentProvider分为自定义的和系统的。系统提供的ContentProvider有联系人,图片等。其他应用可以通过ContentResolver来访问联系人和图片中的数据。下面看看如何...

2019-10-08 18:33:53 750

原创 android 9.0 广播的注册,发送,接收过程分析

广播的注册分为静态注册和动态注册,静态注册是通过PackageManagerService(PMS)来完成整个的注册过程的,当然,除了广播外,其它三个组件也是在应用安装时通过PMS来完成解析和注册的。下面已动态注册为例分析广播的注册过程。在Activity中动态注册广播的代码如下:IntentFilter intentFilter = new IntentFilter("com.android....

2019-09-30 15:41:56 2897 1

android 多渠道 sourceset main文件夹下和其他渠道下的java文件重复 exclude方式解决

android 多渠道 sourceset main文件夹下和其他渠道下的java文件重复 exclude方式解决

2022-01-29

app 研 发 录

本书是作者多年App开发的经验总结,从App架构的角度,重点总结了Android应用开发中常见的实用技巧和疑难问题解决方法,为打造高质量App提供有价值的实践指导,迅速提升应用开发能力和解决疑难问题的能力。本书涉及的问题有:Android基础建设、网络底层框架设计、缓存、网络流量优化、制定编程规范、模块化拆分、Crash异常的捕获与分析、持续集成、代码混淆、App竞品技术分析、项目管理和团队建设等。本书以“问题/解决方案”的形式给出疑难问题的解决方案,同时结合示例代码,深入剖析这些实用的编程技巧和模式,旨在帮助移动开发人员和管理人员提高编程效率,改进代码质量,打造高质量的App。

2018-09-25

移动App性能评测与优化

本想设置0分资源分,结果资源分最少必须选择2分,实在是抱歉了。希望喜欢《移动App性能评测与优化》这本书的朋友,购买正版图书。

2017-11-18

Python 3.4.3

python 装不起来,提示0x80240017错误,咋办?安装这个版本就不会出现这个问题

2017-04-26

高德历史轨迹回放

将已经获取的到的经纬度集合,在高德地图实现轨迹回放,添加开始暂停继续功能,亲测可用。要实现咕咚类似的运动轨迹的,可以做下参考。

2016-07-26

PictureCompress

自己使用过,亲测可用。方便没有分是同志们下载

2016-07-25

友盟分享demo

实现了微信,qq,微博平台的分享,拿到项目中用,只要更改几个appid和appsecret,以及友盟的appkey就可以了。亲测,可以使用。

2016-07-22

android截屏实现demo

实现截屏效果,好用。

2016-07-22

postman 0.8离线版(可用)

Chrome扩展安装包Postman,亲测可用

2016-07-19

Android高微信 聊天 界面 仿IOS

仿微信的气泡聊天是给大家分享一下

2016-07-15

ZXing jar包

ZXing的jar包

2016-07-11

Activity之间跳转时的3D翻转动画

Activity之间跳转时的3D翻转动画

2016-07-08

双向seekbar项目集合(包含多个项目)

双向seekbar项目集合,有需要的可以拿去参考下。

2016-07-01

android 双向seekbar

android双向SeekBar滑动控件,带刻度,需要的拿过去看看

2016-06-30

仿微信点击图像放大

仿微信点击图像放大

2016-06-23

MPAndroidChart Demo以及jar包

android 开源图表库,方便要使用图表的的朋友看效果,里面包含了jar包和源代码。

2016-06-20

okhttp + okio

okhttp的jar包和 okio.jar包,需要的可以下载。

2016-05-25

okhttp最新版

okhttp 网络请求工具。

2016-03-28

android iOS php des 互通加密解密算法

这个可以用做与android php iOS 三个平台,des加解密,支持中文 英文,长字符串

2016-02-22

Android动画高级用法演示

本案例演示了Android动画高级部分的使用。

2016-02-18

斗地主源码

单机Java斗地主设计结构简单容易学习,适合Java编程初学者,适合二次开发学习、别人要10分的资源,免费奉送。

2016-01-21

xutils-3.0.jar包

xutils最新版,解压, 取出jar包和so文件导入项目即可使用。

2015-11-23

android-22

android-sdk\platforms\android-22

2015-11-23

smack_4_1_4(smack各个平台最新版本)

包含各个平台的smack的源码,jar包和api文档。

2015-10-26

spark 2.6客户端(window版本)

基于XMPP协议的IM客户端程序,服务端一般使用openfire

2015-10-26

即时通讯开发讲解视频

基于XMPP协议的 Android 即时通讯客户端,服务端使用openfire,对于即时从事通讯开发的朋友,是不可多得的学习视频。

2015-10-23

android版samck的jar包

即时通讯中smack是对xmpp进行的封装,samck的android版本。

2015-10-23

即时通讯源码

本项目包含了android、IOS、window、Mac平台,包含了服务端和客户端的源码。对于想开发即时通讯的朋友是很好的参考资料,也再次基础上进行二次开发。

2015-10-23

asmack-android-16.jar

Android平台的XMPP开发包 asmack

2015-10-23

Git-2.5.3-64-bit.

git for window的版本 在window上已经使用过,对于需要使用git进行项目管理的朋友,可以下载使用。

2015-10-20

openfire_3_8_1

xmpp协议 即时通讯 服务端 openfire是服务器,下面还有一个spark,这个是一个XMPP协议通信聊天的CS的IM软件,它可以通过openfire进行聊天对话。

2015-10-20

空空如也

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

TA关注的人

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