自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 Flutter共享FlutterEngine页面切换无法点击的问题

背景最近在研究做Flutter一块相关的内容,方案上采用的是单FlutterEngine,全局Flutter元素共用一个FlutterEngine,对于使用单Engine遇到一个很大的坑,页面切换之后无法点击,页面就像卡死了一样,以下三种情况都会发生:第一种:两个FlutterFragment在tab中进行切换,假如AB代表两个FlutterFragment,当A切换到B,再从B切换到A的时候,页面就无法点击。第二种:在FlutterActivity中打开新的FlutterActivity,新的Flu

2020-09-22 10:15:09 1475 10

原创 从奶酪夹心饼干生产中来学习Android 中的gradle构建

在Android开发中,Gradle是每个开发者都会接触的,Gradle 是一个非常优秀的项目构建工具。这是大家都知道的,但是又有啥用呢?最开始的时候很难理解gradle到底是干什么的,相关知识都比较离散,所以很多东西没有串起来,从而导致理解起来比较困难。我自己总结就是:Gradle是一个构建工具,它存在的目的是产生一套“流水线”,对于安卓开发而言这个流水线就是从本地的编写代码以及资源整合到最终生成的产品过程。

2019-12-19 07:28:05 271

原创 一款快速生成安卓shape的插件--NoCodeShape

一、NoCodeShape介绍NoCodeShape是一个能可视化界面操作生成Android中Shape.xml的Android Studio插件。对于新手能更好的去接受Android中相对应的属性,对于资深程序员则能简化操作,快速生成shape.xml。二、NoCodeShape使用方法1. 下载和安装同一般的Android Studio插件下载一样,可以直接Preferences-&g...

2019-11-28 09:19:15 544

原创 Android监听系统截屏的坑

最近有做在监听系统截屏操作,然后对截屏的图片获取到,再在其底部加入二维码或者其他信息生成分享海报。这里面最不好做的就是监听系统截屏的操作了,系统没有提供相关api,所以得靠“骚操作”,目前业内主流的操作,像这篇博文写的那样:https://blog.csdn.net/xietansheng/article/details/52692163通过 自定义媒体内容观察者内部类,去观察媒体数据库的改变,...

2019-07-10 19:28:34 3126 17

原创 Android 基于 J2V8 运行 JavasScript 实践

以上基本上能解决大部分 Android 调用 js的代码逻辑了,这里对整体执行的流程进行一个总结1、通过 webpack 对多个 .js 文件打包2、初始化 V8 环境并加载 .js 文件3、注册 Java 方法,供 js 进行调用4、读取指定的模板5、执行目标 js 方法,并释放 v8 执行过程中产生的资源。

2023-11-04 10:30:00 517

原创 RecyclerView自定义LayoutManager从0到1实践

继承并实现方法重写第一次数据填充的时候数据添加重写和方法设定支持滑动的方向重写和方法,在滑动的时候对屏幕以外的 View 进行回收,以及填充即将滑动进入屏幕范围内的 View 进行填充重写和方法支持其中和是最核心且最复杂的方法,这里稍微拎出来讲一下。

2023-10-31 21:30:53 338

原创 3D LUT 滤镜 shader 源码分析

查找颜色所在位置的小正方形、查找小正方形内的具体颜色、颜色混合,整个流程都比较好理解,但代码相对而言比较难理解,网上看了很多其他的大佬写的一些文章,最开始自己看的时候也是很难理解的,后面终于悟了,所以想通过自己的理解,尽力更形象地解释(虽然可能也没有很形象),如果还有什么疑问,欢迎一起交流学习。

2023-10-30 22:45:00 659

原创 快捷-Mac桌面adb push小工具

最近在Android开发过程中会遇到很多传文件的操作,市面上也有比较多的“文件管理器”,例如锤子的HandShaker,或者谷歌官方的filetransfer,但他们都需要打开“传输文件”这个行为,个人感觉比较繁琐。作为Android开发,使用adb命令行去传输文件是不错的,但每次输入adb push xxx还是挺麻烦,而且必须打开 Terminal 才能运行。为了让所有操作更简化,我做了一个简单的桌面工具,只需要连上手机,正常打开adb,拖到文件到对应区域,则可以实现文件传输。

2022-01-16 10:10:45 2413

原创 Android音视频-初识FFmpeg

已经很久没有写过技术博客了,这段时间加入了新公司,主要时间花在熟悉新业务的技术上。而新的业务主要跟音视频相关,关于音视频的尝试在加入新公司之前,自己有做相关demo的尝试与学习,可以参看音视频相关学习demo。当然,那都是自己“想当然”学习的一些东西,虽然实际工作中并没有派上太大的用处,但让我对音视频相关的基础知识有了一定的概念,对后面的技术尝试做了铺垫。第一个技术挑战比较大的就是进行:视频抽帧,关于视频抽帧网上有很多很多文章进行讲解,但……我始终没有找到一个效率很高的解决方案。直到我遇见了 ffmpeg,

2021-11-16 09:46:30 367

原创 Flutter FFI实践

一、前言在 Android的开发中,我们有 JNI 使得 Java可以调用本地应用或库。Flutter 在前不久发布了 Flutter2,更新了 FFI (我们是否可以把它叫做DNI呢?)进入了稳定状态,开发者可以更安心的使用其功能。但是相关的文档依然很欠缺,导致使用起来有诸多的疑问,以及相关原理性的介绍比较少,所以整理记录一下。二、Dart 同步调用 Native 方法我们以最简单的demo为例,请求一个有参无返回值的C方法在 C/C++中有如下函数:extern "C" __attribu

2021-04-22 21:36:35 3577

原创 Flutter坑之FlutterFragment中SafeArea失效的问题

背景:最近有在做关于Android底部多tab下,对应多个Flutter Fragment的操作。又遇到一个比较坑的问题:FlutterFragment中的flutter页面的SafeArea失效(关于safeArea具体介绍参考官方SafeArea class),简单举例说一下SafeArea的作用:如果你有一刘海屏的手机,如果你的flutter内容为全屏,假如你的内容在全屏最顶部,那么所谓的刘海将会盖住你所想要的内容,如下图所示:这当然不是我们想要的,于是Flutter官方推出:SafeArea这个

2020-11-02 09:47:07 1476

原创 FlutterActivity/FlutterFragment TextInputPlugin内存泄漏

项目场景:单FlutterEngine进入FlutterActivity之后,关闭页面内存泄漏。同flutter官方 issue->https://github.com/flutter/flutter/issues/54275问题描述:Leakcanary提示日志:…… ├─ io.flutter.embedding.engine.FlutterEngine instance │ Leaking: UNKNOWN │ ↓ FlutterEngine.dartE

2020-09-23 09:56:35 438

原创 从Android返回键退出和直接杀死进程退出说起

最近开发的时候,使用了一个单例模式,当我返回键退出App,再重新启动,发现App的确是从首页启动,在还没有执行到为单例类设置数值时候,断点调试的发现已经有了一个数据,并且是上一次运行留下的数据,当时觉得很神奇,明明根Activity已经执行了OnDestroy(),而且再启动的确是从首页过来的,讲道理应该是“Everything will be new”,但是单例里面的数据仍然存在,这可是为什么呢?Google搜了一下,噢!恍然大悟,看到这一块的知识很久没有用就忘掉了,或者说对运行机制相关还不太熟悉吧,所

2020-09-08 23:21:45 1993

原创 基于AndroidVideoCache的预加载(附Demo)

最近有做需求关于视频缓存,了解到相关的开源库AndroidVideoCache,一款市面上相对比较流行的视频缓存框架,而我想利用该框架进行视频缓存的处理,并且希望能够支持预加载。然而该框架作者在18年就已经停止了维护,所以留下了无限的编程空间给其他程序员,对于视频预加载,只搜到一篇《AndroidVideoCache源码详解以及改造系列-源码篇》,然而点进该作者的博客列表,说好的预加载呢???后面也没有了下文,搜遍全网好像没有做AndroidVideoCache的预加载相关的事情,那么这样子的话……自己干

2020-07-07 09:21:16 2655 12

原创 WeakHashMap与Java引用相关

记得在很久之前有写过一篇《Java中的Reference解析》,主要讲的是Java中的四种引用方式与引用队列,不过这些都是基础的理论知识,最近开发项目中有使用到WeakHashMap,对于Java的引用以及引用队列有了更深的了解,在此做个相关总结。一、WeakHashMap的实现方式总体来说,WeakHashMap的底层数据结构与HashMap的实现差不多,都是用“拉链法”来实现,主要区别在于WeakHashMap的Entry 继承于WeakReference,并维护一个ReferenceQueue,使

2020-06-22 19:12:39 161

原创 《费马大定理》-站在巨人的肩膀上

大约在1637年左右,法国学者费马在阅读丢番图《算术》拉丁文译本时,曾在第11卷第8命题旁写道:将一个立方数分成两个立方数之和,或一个四次幂分成两个四次幂之和,或者一般地将一个高于二次的幂分成两个同次幂之和,这是不可能的。关于此,我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下。其中的条件用数学表达语言则:当整数n>2时,关于x,y,z的方程xn+yn=zn没有正整数解。当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。当整数n&

2020-06-18 00:26:15 492

原创 Http缓存机制

最近有接触到Http缓存机制的问题,自己进行一个总结。一、Http缓存总体流程浏览器加载一个页面的缓存流程如下:浏览器先根据Http Header信息来判断是否命中强缓存。如果命中则直接加载本地缓存中的资源,并不会将请求发送到服务器。如果未命中强缓存,则浏览器会将资源加载请求发送到服务器。服务器来判断浏览器本地缓存是否失效。若可以使用,则服务器并不会返回资源信息,浏览器继续从缓存加载资源...

2020-04-28 11:51:31 213

原创 想统计自己总共提交了多少行代码?

作为一名程序员,我们很想知道自己到底提交了多少行代码到远程仓库,有没有什么工具能够帮我们统计自己写过的代码行数呢?答案是有的。这是本次博文的最终效果。对于代码提交行数统计,通过git 的系统命令就能做到,如下代码所示git log --author='username' --pretty=tformat: --numstat | awk ' {add += $1; subs += $...

2020-03-01 17:28:49 4317

原创 Java中的Reference解析

前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能...

2019-10-30 19:53:16 477

原创 Java中Lambda表达式解析

在大部分开发者看来,Lambda表达式只是一种语法糖,简化了书写匿名内部类的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的,与内部类的实现有很大的差异。本文主要讲解以下知识点:一、函数式接口二、Lambda表达式与匿名内部类三、Lambda实现原理一、函数式接口众所周知Javascript具有一个强大...

2019-10-10 09:05:18 1324

原创 Android LeanCloud 从简单的单聊、群聊、收发图文消息开始 Connection Lost错误

官方文档写的真是把人搞得没脾气……6.0之后看这份官方文档走起-> https://leancloud.cn/docs/realtime-guide-beginner.html结果Connction Lost错误,文档也没有说为啥,各种Google 百度 搜出来,要在Application里还要加这段代码: AVConnectionManager manager = AVConnect...

2019-09-26 16:49:05 334 1

原创 Android骨架屏效果的实现与原理解析

0、前言大家在使用淘宝的时候,如下图所示有遇到这样的效果,其会只展示一部分骨架大致图,等数据加载完毕之后再展示真正的页面数据。与菊花图相比起来,这样的实现能更好的提升用户的体验,这种效果称做:Skeleton Screen Loading,中文叫做骨架屏。1、骨架屏的实现方式在现在主流的骨架屏实现效果中有两种方式:通过View或者Adapter的替换来实现骨架屏效果。可以参考Shim...

2019-09-05 09:59:22 3878 2

原创 Android插件化之DexClassLoader

0、前言:插件化要解决的三个核心问题:类加载、资源加载、组件生命周期管理。在Android插件化中其原理实际是 Java ClassLoader的原理,此博文主要对Android插件化中类加载做部分做总结,便于之后对Android插件化的理解学习。Android的Dalvik虚拟机和Java虚拟机的运行原理相同都是将对应的java类加载在内存中运行。而Java虚拟机是加载class文件,也可...

2019-08-27 17:07:57 680

原创 报错:Binary XML file line #0: Attempt to invoke virtual method 'boolean java.lang.String.equals

完整报错:Binary XML file line #0: Attempt to invoke virtual method ‘boolean java.lang.String.equals(java.lang.Object)’ on a null object referenceCaused by: java.lang.NullPointerException: Attempt to inv...

2019-07-23 15:05:38 303

原创 单例模式的设计

我们都知道单例模式很简单,大概是这样://单线程单例模式实现public class Singleton { private static Singleton instance=null; public static Singleton getInstance() { if(null==instance){ instance = new ...

2019-07-09 09:54:34 156

原创 Android监听截屏事件之媒体读取的探索

最近做了一个需求:监听用户截屏,然后生成相关海报。参考了Android 截屏事件监听的文章,大致思路是:1、利用ContentObserver用来监听指定Uri的所有资源变化,当媒体库中有相关图片新增的时候,则发送相关的通知。2、得到回调的Uri后,借助ContentResolver在媒体数据库中查询最后一条数据3、对数据做一些过滤。比如短时间重复截屏的情况以及其他App也插入了媒体文件等...

2019-07-02 16:28:01 641

原创 基于Volley框架的返回数据的范型处理

在平时最普通的Volley的网络请求中,我们StringRequest是这样请求网络数据的:StringRequest stringRequest = new StringRequest("http://www.baidu.com", new Response.Listener<String>() { @Override ...

2019-05-13 14:56:54 169

原创 关于位运算和HashMap中一个求最小2次幂的算法

今天在HashMap的内部源码的时候,看到这样一个算法:/** * Returns a power of two size for the given target capacity. * 返回大于或等于 cap 的最小2次幂 */static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >&g...

2019-04-29 15:39:46 328

原创 学习笔记-Java虚拟机类的加载机制

什么是虚拟机类的加载机制?虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从加载到虚拟机的内存中开始,直到卸载出内存为止,整个生命周期为:加载(loading)验证(verification)准备(preparation)解析(resolution)初...

2019-03-21 09:33:58 106

转载 两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:class Grandpa { static { System.out.println("爷爷在静态代码块"); }}class Father extends Grandpa { static { System.out.println("爸爸在静态代码块"...

2019-03-20 17:45:05 118

原创 LayoutInflater源码解析

我们经常实用的LayoutInflater这样用:View view = LayoutInflater.from(context).inflate(R.layout.resource,root,flase);进入inflate进行源码解析public View inflate(@LayoutRes int resource, [@Nullable](https://my.oschina.ne...

2019-03-12 16:24:53 128

原创 Java反射中getGenericInterfaces和getInterfaces的解读

今天在做解析网络请求后得到的数据的转化的时候用到了getGenericInterfaces这个方法,顺便也了解了下和他长得差不多的getInterfaces方法。官方文档解释getGenericInterfaces:Returns the {@code Type}s representing the interfaces directly implemented by the class ...

2019-02-20 10:05:35 6522

原创 Android Studio 导入项目报:Connetction Refused

去找到日志文件

2018-08-15 11:17:23 302

原创 Mac安装Scrapy报错:distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.

执行:sudo pip install incremental==17.5.0 再继续 sudo pip3 install Scrapyhttps://github.com/scrapy/scrapy/issues/3033

2018-08-06 10:57:04 4962

hexo-theme-icarus.zip

hexo Icarus  主题

2020-06-22

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

TA关注的人

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