自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 android drawBitmap 透明区域 变黑

记录一下使用PorterDuffXfermode 处理重叠区域时,Bitmap 非透明区域 变黑,改了几个小时。终于解决了。@Overridepublic void onDraw(){ canvas.drawRect(0, 0,getWidth(),getHeight(), mPaint); mPaint.setXfermode(...

2019-08-13 18:57:13 1966

原创 Android BitmapShader/Paint drawBitmap/drawRect 切圆角、平铺

//kotlinval bitmapOneBg = BitmapFactory.decodeResource(resources, R.drawable.image)val paintImage = Paint()paintImage.shader = BitmapShader(bitmapOneBg, TileMode.REPEAT, TileMode.REPEAT)//canvas?...

2018-11-26 15:19:32 576

原创 Coordinatorlayout/AppBarLayout + RecyclerView 上拉加载更多的监听延迟(卡顿)

记录一下Coordinatorlayout/AppBarLayout + RecyclerView 上拉加载更多的监听延迟(卡顿) 顶部伸缩布局,RecyclerView上拉加载更多的监听延迟严重(1-2s),非常影响体验。这里需要给AppBarLayout设置一个app:layout_behavior ;<android.support.design.widget.A...

2018-11-21 19:11:27 1758

原创 SVGA源码

  SVG 概念原文地址:https://jfson.github.io/2018/06/21/49-svga/* SVG 实际上指的是设计软件中的概念:SVG图片格式,一种矢量图形。* 另一个角度来讲一张图或者一个动画,是由很多上下层级的图层构成。比如当前的简单的图,看到的是一张图,但在设计工具中是三个图层构成,有着不同的上下层级顺序。SVGA成本* SVGA目不支持种类:...

2018-06-21 00:35:50 4230 6

原创 Android Studio Log path is inaccessible

Log path ‘/Users/sun/Library/Logs/AndroidStudio3.0’ is inaccessible. If you have modified the ‘idea.log.path’ property please make sure it is correct, otherwise please re-install it.手残清理缓存的时候删了一些文件,An

2018-03-12 14:00:51 1969

原创 maven库上传

账号申请bintray 申请账号。2.新建一个名称为:maven 的maven库。库新建 Android Studio 项目,新建要上传的Module模块。在根目录(项目所在)下的 build.gradle中添加库引用buildscript { repositories { google() jcenter() } dependenci

2018-02-10 23:58:24 497

原创 Android 自定义View 解耦框架

起因项目越来越大,解耦越来越有必要。从架构上解耦mvc到mvp,从功能上解耦和拆分,这就用到了自定义View,自定义View往往也需要用到Activity/Fragment的生命周期。这时候通常做法是在Activity/Fragment中对View进行生命周期的调用透传。如果自定义View的功能逻辑过于复杂后,再拆解出一个MVP层级,Presenter层和View层也需要再重复的透传一层生命周期

2018-02-10 23:57:12 737

原创 Window 窗口

1.什么是Window1.1、代码层面来看,Window是一个abstract类。/** * Abstract base class for a top-level window look and behavior policy. An * instance of this class should be used as the top-level view added to the *

2017-12-29 09:08:26 282

原创 2.Reverse Integer

1.题目(LeetCode | 7 | easy):Reverse IntegerGiven a 32-bit signed integer, reverse digits of an integer.给定一个32位有符号整数,求整数的反转数字。Example:例1: 输入: 123 输出: 321例2: 输入: -123 输出: -321例3: 输入: 120 输出:

2017-12-24 22:57:09 224

原创 1. Two Sum

1.题目(LeetCode | 1 | easy):Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution

2017-12-24 22:56:15 222

原创 Android 缓存机制 LRUCache

LRUCache1.Android 的缓存中不管是内存缓存和磁盘缓存都用到了LruCache,LruCache的核心思想就是LRU(Least Recently Used)算法LRU 算法LRU(Least Recently Used)直面翻译过来:最近最少使用,就是淘汰旧数据的策略,保留最近访问过的数据。如果需要加载新数据但空间不足的情况下,会按照最近访问时间排序,将最老的数据淘汰掉。 辅

2017-12-22 15:17:29 262

原创 算法基础知识

算法的复杂度算法的复杂度: 算法的时间复杂度和空间复杂度合称为算法的复杂度,一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。用于描述时间复杂度&空间复杂度的公式关键字 Big-O时间复杂度:执行程序所需的时间。可以估算出程序对处理器的使用程度。一般用内层代码语句执行次数来统计空间复杂度:执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度,就是在运行过程中临时占用存储空间

2017-12-19 23:52:17 319

原创 Glide(二)Request队列管理

入口上篇总结了下Glide利用fm和一个空Fragment 进行生命周期的管理,这里继续看load & into。不多说,上代码// 上篇分析了with,继续看下 load & intoGlide.with(this).load("url").into(...);1.1 loadpublic RequestBuilder<Drawable> load(@Nullable Object mode

2017-12-13 17:14:27 1106 2

原创 Glide(一)生命周期绑定

Glide 的解耦方式很独特。1.1 Glide.with()Glide.with(FragmentActivity activity)// RequestManager with(FragmentActivity activity)public static RequestManager with(Activity activity) { return getRetriever(ac

2017-12-11 19:21:11 606

原创 Fragment 的生命周期来龙去脉

Fragment的生命周期我们都不陌生,但是其如何利用FragmentManager从Activity生命周期挂载而来的呢,尤其是看了glide源码后,发现其巧妙的利用了FragmentManager来绑定自己的生命周期,那么为了更清晰的深入理解,一起来看下6.0的源码是如何处理的。FragmentActivity1.从启动一个FragmentActivity开始。从onCreate()方法中

2017-11-06 18:21:13 604

原创 android 中资源图片被系统相册扫描显示问题

问题 android .nomedia 打开相册,发现应用下载的图片被显示在其中,往往这时候我们不希望把其暴露给用户。比如:视频、图片、音频都不需要暴露给用户。 ### 解决方案 * 1.修改资源文件名 * 比如图片为img/png的格式修改为ing 等等,系统不认的格式2.添加忽略文件”.nomedia”,在需要呗忽略的文件夹下创建一个名为”.nomedia”的空文件即可

2017-09-28 16:58:28 3718

原创 构造者模式

构造者模式(Builder Pattern) 建造者模式是及其常用的一种设计模式,经常提现在一些开源的三方库中来进行return 当前对象进行链式调用,如果你要开源一个niubility 的库,那么学习一下建造者模式是非常有必要的。介绍:将一个复杂对象的构建与它的表示分离,用于属性参数很多时。很多流行框架用到它,举个最典型的Retrofit的使用。// 忽略参数,看下如何使用Retrofi

2017-09-23 21:02:55 440

原创 FastgrabCongigReader 华为P9 内存泄漏

最近有个泄漏很诡异,来自华为 P9 泄漏日志:static android.rms.iaware.FastgrabCongigReader.mFastgrabCongigReaderreferences android.rms.iaware.FastgrabCongigReader.mContext...借用一张泄漏图: LoginActivity设置给了,导致LoginActivity被静

2017-09-23 20:54:27 3028

原创 抽象工厂模式

抽象工厂模式相对于工厂模式来说,最大的不同是:将工厂的共同特征抽取出来,提供一个生成工厂类。1.举例制作果汁,首先提供两个接口类,果汁的种类和加冰多少。public interface MakeIce { void putIce();}public interface MakeJuice { void juicing();}2.提供水果类和冰多少的类,这里方便起见,我们都写成

2017-09-20 16:58:00 274

原创 工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。1.举例制作果汁,首先提供两个接口类,果汁的种类和加冰多少。public interface MakeIce { void putIce();}public interface MakeJuice { v

2017-09-19 20:35:52 415

原创 动态的添加ImageView并居中显示

Android 中动态添加控件,并设置居中和Margin: 其中DisplayUtil.dip2px()是为了适配。 SimpleDraweeView image = new SimpleDraweeView(getContext()); LayoutParams param = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutPara

2017-09-07 14:25:28 7199

原创 代理模式

代理模式在java 中的使用很常见,在Android中使用更为常见,类似代理一些生命周期,或者AOP编程以及业务解耦等等使用场景。代理模式分为静态代理和动态代理。静态代理interface BaseView { void showText();}class ProxyView implements BaseView{ public static final String TAG

2017-08-29 12:56:07 306

原创 Android启动速度优化

启动优化 随着项目越来越大,App的启动时间愈来愈长,有必要对给初始化进行梳理,并预留初始化接口。 经过一番折腾后,并对比优化前,成果还不错:优化35%-50%。Google文档:https://developer.android.com/topic/performance/launch-time.html1.启动时间统计a.第一种方式查看Logcat日志,搜索关键字:Displaye

2017-08-21 20:17:45 501

原创 Android源码(10) --- Binder(4) ServiceManager 启动

纵观Binder通讯过程,无不在跟ServiceManager打交道,了解ServiceManager 交互流程就显得很有必要了。ServiceManager分为启动和、获取、添加、注册服务。首先从启动过程来了解。源码路径android/system/core/rootdir/init.rcandroid/frameworks/native/cmds/servicemanager/ |

2017-08-08 19:25:12 375

原创 Android源码(9) --- Binder(3) AIDL使用

要想了解Binder的原理,结合使用方便我们更简单的去理解调用逻辑。AIDL :Android Interface definition language 我们可以理解为Android 接口定义语言。通过它可以实现进程间的通讯(IPC),如何实现AIDL呢? 进程间通讯需要两个进场,体现在Android中就需要两个App(一个作为Server,一个作为Client).接下来看如何使用AIDL来进行进

2017-07-31 19:55:33 295

原创 Android源码(8) --- Binder(2) 序列化

Android 开发的时候,在对数据进行持久化的时候,或者数据传递的时候会用到序列化,这时候可以对当前数据类实现Serializable或者Parcelable接口。序列化序列化指的是将一个实例对象编码成字节流,并从字节流编码中重新构建对象实例的能力。将一个对象编码成字节流,称为序列化;从一个字节流中读出一个对象实例,称为反序列化。使用场景1.持久化存储对象2.序列化对象在网络中传输3.

2017-07-31 19:54:48 257

原创 Android源码(7) --- Binder(1) Linux IPC 机制

Linux IPC 机制 IPC(InterProcess Communication)进程间通讯,我们都知道Android内核其实就是Linux内核,而每个Android Application进程其实就是一个Linux进程,Linux 已经有比较好的IPC机制,为什么Android用Binder实现IPC机制呢?,分析Linux 一下的IPC 机制,方便深入理解Android Binder机

2017-07-20 19:51:33 352

原创 单例模式

单例模式 最常用的单例模式,经常在项目中见,梳理后发现各种各样的单例,索性梳理一下。自己创建自己,提供了访问其唯一对象的方式,可以直接访问,不需要实例化对象。私有构造自己创建唯一实例1.懒汉式 非线程安全lazy loading不标准,不常用public class UserModel{ private static UserModel instance;

2017-07-14 19:56:13 189

原创 设计模式

设计模式 一直所熟知的设计模式: 单例模式、工厂模式、建造者模式等等。这些常用的之外,其他非常见的设计模式没有专门归类总结,借此机会,归纳一下咯。设计模式总分为:创建型模式、结构性模式、行为型模式、J2EE模式创建型模式 在创建对象的同时隐藏了创建逻辑的方式(非直接实例化)工厂模式(Factory Pattern)抽象工厂模式(Abstract Factory Pattern)单例模式

2017-07-14 19:55:37 416

原创 sketch 映客Android 设计

不会设计的程序员不是好攻城师人生最痛苦的是,马上提测了,图不行,加班设计师也不在。于是自学了点 sketch 设计软件。学会了简单的切图,排版。苦于公司的设计都是同步ios,喜欢Android Material Design的设计风格,大腿一拍,说干就干,好赖凑出一幅设计图。主页(侧滑菜单 + 开播按钮)向上滚动隐藏部分按钮侧滑菜单其实很多细节ios 已经开始抄袭Android了。Android已经

2017-07-12 20:10:19 1031

原创 Android 源码(6) --- 异步消息机制Handler、Looper、MessageQueue

Handler、Looper、MessageQueue 初始化1.在 UI 线程创建 Handler,通常直接new Handler;private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.hand

2017-07-12 20:03:18 323

原创 Android源码(5) --- Application 启动流程

应用启动流程 每个Application Linux进程中,Android操作系统会启动这个进程当这个Android组件需要执行的时候,当其不在长时间使用或者系统必须回收内存为其他App时,这个进程会被干掉。回顾:上篇blog中,介绍了Launcher启动流程,最后点击桌面图标启动应用protected void onListItemClick(ListView l, View v, int

2017-07-12 20:02:23 316

原创 Android源码(4) --- 系统 Mainfest 文件解析流程

系统 Mainfest 文件解析流程 为什么要看 Mainfest 文件解析流程呢,因为解析来分析apk的安装流程需要用到,而且 AndroidMainfest 文件是程序的配置文件,了解其解析流程还是非常有必要哒~ 之前的分析中,系统会在启动时读取所有app的Mainfest以便于启动某个应用。1.入口在PackageManagerService 中,系统去解析app文件。那么从构造函数开始

2017-07-11 13:01:24 754

原创 Android源码(3) --- 系统Launcher 启动流程

Launcher 启动流程1 启动Launcher在之前分析了一下SystemServer源码,最后启动boot/core/other … Service,在startOtherService 中,有调用到 mActivityManagerService.systemReady();mActivityManagerService.systemReady(new Runnable() {

2017-07-11 13:00:27 307

原创 Android源码(2) --- SystemServer进程启动流程

SystemServer 进程1.1 SystemServer进程是由Zygote进程fork 出来的。上篇介绍了fork过程1.2 SystemServer进程 是用来启动各种系统服务的进程,例如ActivityManagerService,WindowManagerService,PowerManagerService,PackageManagerService等等,当应用需要系统服务也是通

2017-07-11 12:59:52 303

原创 Android源码(1) --- Zygote进程启动流程

Zygote进程简介什么是Zygote进程? Zygote进程 是整个Android系统的根进程,包括SystemServer进程和所有应用进程在内都是通过Zygote进程 fork 出来的。Zygote进程则是通过Linux系统init进程启动。启动顺序: Linux系统init进程 –> Zygote进程 –> SystemServer进程 –> Application 进程init进程:A

2017-07-11 12:59:01 236

原创 Android 项目构建过程

Handler、Looper、MessageQueue 初始化1.在 UI 线程创建 Handler,通常直接new Handler;private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.hand

2017-07-11 12:58:14 266 1

原创 Android Studio 编译系统源码

环境配置 & 下载参考文章 官方文档 湫水blog 清华镜像 调试 以下所有操作在mac上进行推荐下载 7.0及以上系统!!!1.创建磁盘映像(80G)$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg2.安装MacPorts (类似brew

2017-07-10 18:55:10 2318

原创 AE 制作一个简单的动画

创建一个简单的动画 常用快捷键:command + 3 打开预览界面;空格键 直接预览1、 command + N 创建一个工作空间,尺寸选择 720 x 1280 或者如图在当前工作空间右键 New Composition 2、在下方工作空间中右键New –> Solid –> ok,新建一个正方形于工作区间。如图3、打开刚刚新建图层的选项,直至最后一级,我们可以看到Anchor Poi

2017-07-10 18:53:12 14828

原创 AE 以及 Bodymovin的安装

原文地址: https://jfson.github.io/2017/03/06/AE-Bodymovin-environment/AE安装(mac)AE 下载及安装地址下载完成后,打开dmg 文件,找到 Build/After Effects CC 2017_Install.pkg文件,双击安装,具体参考下载地址内容安装 Bodymovin 插件 (mac)AE 插件 & Bodymovin 百

2017-07-10 18:50:55 17299 1

Android电话AIDL

Android电话AIDL,利用反射来获取电话服务,对电话进行操作

2015-12-21

空空如也

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

TA关注的人

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