自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JokAr

记录平常学习时所遇到的问题和一些例子。

  • 博客(118)
  • 资源 (6)
  • 收藏
  • 关注

原创 ByteX-shrink_r源码解析

ByteX是字节团队开源的一个字节码插桩工具,而shrink_r是其中的一个插件是用来对R文件常量内联,R文件瘦身;无用Resource资源检查;无用assets检查。就是为了解决上述问题中module工程里R文件没有被内联产生的一种方案,他通过ASM操作class文件进行操作对使用到R类变量的地方进行常量值替换,然后删除R文件从而达到减少包大小的目的。总共流程如下第一遍遍历traverse class获取到所有待替换R文件类变量的常量。

2022-12-01 09:30:55 766 1

原创 Okhttp3 链接池复用机制源码探索

前文对于http请求我们都知道开始于TCP链接的三次握手然后传输数据然后释放,如下图而当我们开启连接复用keep-alive后就是指在上一次链接不立马断开链接在超时范围内复用connection在timeout 空闲的时间内就会复用相同的Request来减少握手大幅度提高了网络请求效率;如下图而在Okhttp3中是怎么做到连接池复用的,本文从源码(版本v4.9.3)角度来进行探索Okhttp3的连接池复用、清理、回收机制连接池的代码类位于okhttp3.ConnectionPool,该类作为默

2022-05-18 13:03:55 995

原创 ASM里如何判断是不是调用了超类方法

通过判断方法的 ower是不是当前类的superName且指令是 Opcodes.INVOKESPECIAL

2021-05-21 15:26:27 290

原创 Adnroid - startService启动过程源码分析

部分内容来自《Android开发艺术探索》ContextImplservice的启动是从ContextWrapper的startService()开始的, @Override public ComponentName startService(Intent service) { return mBase.startService(service); }方法里调用了mBase.startService(service);来启动service,而mBase的类.

2020-09-11 17:08:25 181

原创 try...catch...finally与return

场景1不走catch try { return 1 } catch (E: Exception) { return 2 } finally { return 3 }先执行try然后执行finally,最终返回3场景2走catch try { throw RuntimeException() return 1

2020-09-08 16:52:05 238

原创 Android-AsyncTask源码解析

AsyncTask 使用 public void test(){ MyAsyncTask myAsyncTask = new MyAsyncTask(); myAsyncTask.execute(""); } class MyAsyncTask extends AsyncTask<String, Integer, Boolean>{ @Override protected Boolean doInBack

2020-09-07 17:59:03 158

原创 ‘void android.view.View.dispatchDetachedFromWindow() on a null object reference’ 修复记录

线上报了一个void android.view.View.dispatchDetachedFromWindow()bug,日志如下Attempt to invoke virtual method 'void android.view.View.dispatchDetachedFromWindow()' on a null object reference1 android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:3867)2 a

2020-05-19 14:35:15 4547 2

原创 转:解决Matcher ANR

long millis = System.currentTimeMillis(); // This checkInterval produces a < 500 ms delay. Higher checkInterval will produce higher delays on timeout. Matcher matcher = createMatche...

2020-03-22 18:19:37 294

原创 SPI机制原理解析

SPI机制原理解析看了上篇spi使用后,你或许觉得spi太好用了吧,但或许也有疑问:为什么只能放在META-INF/services/目录下?为什么要用全路径命名?他的实现原理是什么?基于这两个问题,我们深入探究下ServiceLoader源码。构造函数 private ServiceLoader(Class<S> svc, ClassLoader cl) { ...

2020-03-22 17:54:46 376

原创 Android-使用@AutoService实现spi

引入(Koltin)apply plugin: 'kotlin-kapt'kapt 'com.google.auto.service:auto-service:1.0-rc6'api 'com.google.auto.service:auto-service:1.0-rc6'举例创建一个接口文件interface Book { fun name() :String}创...

2020-03-10 23:25:57 3320

原创 大话设计模式---责任链模式

责任链设计模式介绍使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它位置。----《Android设计模式》使用场景多个对象都可以处理这个请求,但具体哪个处理则在运行时决定。在请求处理者不明确的情况下向多个对象中的一个提交请求需要动态指定一组对象处理请求UML使用示例在日常开发中网络请...

2020-01-14 21:52:21 222

原创 android-apt编译时注解注意事项

最近在写APT相关,遇到一些坑,这里总结写Gradle版本不能太高我一开始用的最新版结果死活没有效果最后发现是gradle版本太高,最后我用的是 classpath 'com.android.tools.build:gradle:3.1.4'distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-b...

2019-12-22 21:23:25 237

原创 这可能是最好用、实现最简单的Android权限请求库了

为什么最好用?该工具库使用Builder设计模式,可以说是非常简单上手的工具了,使用方法如下:kotlin PermissionUtil.Builder(this) .setPermissions(Manifest.permission.RECORD_AUDIO) .setDenied { Toast.mak...

2019-12-13 21:30:38 1968

原创 从源码角度分析 - Activity.onCreate可以在子线程里更新UI么?

我们都知道字线程里更新不能更新UI,否则系统会报Only the original thread that created a view hierarchy can touch its views.错误,具体如下:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that crea...

2019-11-30 16:47:27 281

原创 从App启动理解ContentProvider的创建

ActivityThread.main我们知道app的启动是从ActivityThread.main方法开始的,所以我们先从main看起 public static void main(String[] args) { ... //创建Looper Looper.prepareMainLooper(); //创建ActivityThread Ac...

2019-11-07 20:59:17 992

原创 Android-使用ContentProvider来初始化你的sdk(一)

在日常Android开发中经常会写一些sdk来供他人或者自己调用,一般这些sdk都涉及到初始化,虽然这个初始化过程我们一般都会让调用者自己来调用完成初始化过程。但是今天我们来介绍一个不需要调用者调用sdk初始化的方法,我们自己来完成这个初始化过程。下面来介绍方法创建Library首先我们创建个简单的library,这个library的功能就很简单:需要传入context提供判断是否已初始...

2019-10-26 20:17:57 2028

原创 recyclerView item 曝光算法(Rx版本)

功能点基于rxjava封装实现了去重,不会重复曝光,可以根据 第一个、最后一个item显示高度比来算曝光/** * recyclerView item曝光计算工具类 * Create by JokAr. on 2019-09-24. */public class ThrottleTrackingBus extends RecyclerView.OnScrollListener ...

2019-09-24 21:25:13 758 1

原创 gradle 上传Jar 到maven

新建maven.gradleapply plugin: 'maven'uploadArchives {repositories {mavenDeployer {// 本地仓库路径repository(url: ‘’) {//用户名,密码authentication(userName: ‘’, password: ‘’)}/ snapshot仓库路径(没有可以不写)...

2019-06-11 13:25:01 1142

原创 android studio 上传android arr到本地maven仓库

新建一个maven.gradle文件apply plugin: 'maven'uploadArchives { repositories { mavenDeployer { // 本地仓库路径 repository(url: '') { //用户名,密码 ...

2019-06-11 11:40:00 898

原创 探究为什么Glide 可以与 Activity 生命周期绑定

用过Glide同学都知道,Glide的最大不同之处就是可以与Activity生命周期绑定,在Activity``````onDestroy时自动结束网络请求,释放资源。那么为什么Glide 可以做到与Activity绑定生命周期,并且是怎么做到到呢?我们通过一些代码来说明(代码均来自Glide源码):首先我们创建一个 LifeCycleListenerpublic interface Li...

2018-12-24 19:03:10 658

原创 android uri 解析获取文件真实路径(兼容7.0+)

主要是兼容7.0以后的fileProvider 把URI 以content provider 方式 对外提供的解析方法 public static File getFileFromUri(Uri uri, Context context) { if (uri == null) { return null; } switc...

2018-10-07 12:43:21 9477 8

原创 手撸一个 微信长按菜单 - FloatMenu

在日常开发中,长按某个view出现个菜单是很常见的需求,Google 也给我们提供了一些组件来实现,比如PopupMenu。但是在实际使用中还是发现他无法满足我们的所有需求。比如:产品要求长按菜单出现在手指按下的位置,额 这就头疼了,PopupMenu只能展示在view的底部或者头部。还有个问 题如果你的view过长超过一屏,那么 PopupMenu 就无法显示在屏幕里了。所以没办法,只...

2018-07-14 18:29:11 1084

原创 BottomSheetDialogFragment 如何设置高度和禁止滑动

主要是获取dialog 的BottomSheetBehavior 然后设置 setPeekHeight 和 BottomSheetCallback.codepublic class BottomSheetFragment extends BottomSheetDialogFragment { private Button button; private View ...

2018-07-07 19:58:31 7630

原创 Android国际化(多语言)实现,支持8.0

前言最近因为项目中使用了国际化,所以正好研究了下实现方法; 首先说下项目需求: - 可以随着系统切换语言而切换语言,不支持的语言显示默认 - 用户可以选择语言,且不会随着系统切换语言或者应用重启而还原虽然需求还是很简单的,但是实现起来还是遇到了不少的麻烦,首先看下效果图: 老规矩项目源码实现思路在application 的 attachBaseCont...

2018-04-07 22:32:42 10205 10

原创 android 使用距离传感器实现贴近息屏离开亮屏

注册权限要控制屏幕息屏需要用到WakeLock,所以需要在Manifest里注册&lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt;代码实现注册传感器SensorManager sensorManager = (SensorManager) getSystemService(Con...

2018-03-21 12:04:30 5729

原创 mac 环境编辑编辑命令

$ cd ~$ touch .bash_profile$ open -e .bash_profile$ source .bash_profile

2018-02-25 16:24:47 310

原创 怎样在不使用room情况下把本地数据转化为DataSource.Factory?

最近使用了 google 新发布的框架 Android Architecture Components,使用起来很酷,不用操心数据的持久化,自动刷新等生命周期问题。但是却遇到了个问题,这个框架一起使用很爽,但是要是使用其中的几个就会遇到些问题,比如:不使用 room sql 框架把自己的数据库数据转换为 DataSource.Factory,下面介绍如何解决的:查看了 room 源码发现了所有...

2018-02-10 21:25:20 1298

原创 RecyclerView 获取 item 的位置

RecyclerView 获取 item 的位置

2017-11-06 16:58:53 2438

原创 HandlerThread 源码解析

HandlerThread 是什么?系统对 HandlerThread 的解释是这么一段话:Handy class for starting a new thread that has a looper. The looper can then be used to create handler classes. Note that start() must still be called.从上面

2017-11-01 10:49:10 277

原创 Android 获得最近一张拍照或截屏图片

类型微信那种,拍了一张照片或者截了屏 点击聊天加号 就会有个 弹框询问是否要发送那张图片;这里只是做了获取那张最新图片的代码,没有判断时间间隔

2017-10-16 11:18:51 4450 5

原创 Android 事件分发机制-源码分析

Android 事件分发机制-源码分析

2017-10-10 09:42:26 420

原创 Glide 使用Transformation 时 placeholder、error 无效解决方法

Glide提供了Transformation 可以让图片显示成各种样式,但是使用Transformation时会有个问题,比如使用CircleCrop时预览图和加载失败后显示的图并不是圆形,查阅官方看到说 transformation比不会对此过程进行转换,所以才产生了上述问题,解决方法如下(Glide V4+版本):2018-2-26 修正 public static void lo...

2017-09-29 14:04:17 5192

原创 Swift - 使用SWRevealViewController实现侧滑菜单

侧滑菜单是很多应用常见的功能,有很多方式可以实现,本篇介绍如何使用SWRevealViewController来实现侧滑菜单为;

2017-09-16 15:49:26 989

原创 swift - WKWebView JS 交互

本文介绍WKWebView怎么与js交互,

2017-09-13 17:54:30 4639

原创 Swift - UITableViewAutomaticDimension 不起作用的解决办法

问题学习swift过程中遇到了个问题就是UITableView的高度自适应UITableViewAutomaticDimension不起作用,并且还报了个 [Warning] [Warning] Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tablev

2017-09-11 21:22:23 5668

原创 Swift - moya学习笔记

本文主要是练习Moya的熟练使用简单的网络请求

2017-09-04 23:21:03 3644

原创 Android Studio导入项目卡在build或之前环节解决方案

Android Studio导入项目卡在build或之前环节解决方案

2017-08-29 21:01:34 464

原创 自己造轮子 - Android ViewPager轮播实现

ViewPager轮播实现

2017-08-27 22:54:11 330

原创 Swift - 跳转ViewController黑屏解决方法

跳转ViewController黑屏解决方法

2017-08-23 21:56:06 2521

原创 android webview点击input不弹出输入法解决方案

android webview点击input不弹出输入法解决方案

2017-08-14 10:58:19 4120

Android 仿iPhone UIActionSheet控件效果很好用

Android 仿iPhone UIActionSheet控件效果很好用类似qq上传头像前的选择控件

2015-02-06

Python基础教程

这个事Python的基础教程讲述的很全很广,适合新手学习

2014-06-09

传智播客精品就业班JAVA种子

传智播客精品就业班JAVA种子,的所有关于java教程的视频教程

2014-05-08

谭浩强 书的所有例题 题目

包括了 谭浩强书上的所有例题 及其书后作业的答案

2013-01-06

c语言经典例题

c语言 经典例题 100例 包括了 谭浩强书上的例题 经典100例

2013-01-06

刷机精灵 电脑版

用于刷安卓手机的神器 你可以对你的手机进行傻瓜式刷机的神器

2012-10-13

空空如也

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

TA关注的人

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