自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 coroutines 学习随笔「一」

文章目录前言疑问1.为啥用协程还要添加一个额外的依赖库 太奇怪了我的runBlocking,launch,withContext 等等都哪去了?跟踪到标准库去看看从现在开始进入到标准库了下个小结论this is BaseContinuationImpl 可能为true吗回到问题:为啥用协程还要添加一个额外的依赖库 不加行不行前言前几天开始正式学习研究coroutines了 因为之前一直处于会用的状态很多东西都是懵懂的以下研究基于idea环境疑问1.为啥用协程还要添加一个额外的依赖库 太奇怪了

2021-08-31 15:16:44 294

原创 论一论后端给的那些不合法格式的json

gson解析有这样的json?有数据的时候返回{ "key1":{ "name1":"value1", "name2":"value2", "name3":4 }}而无数据的时候返回{ "key1":[]} 解决方案这种就是后端数据返回的格式不合理 应该要求后端去调整如果因为特殊原因(????)后端无法修改 我们自己也是有处理方案的gson解析这是实体类data class Mine( var

2021-06-21 10:50:52 625

原创 android 绘制流程 ( 一 ) (找parent)

绘制流程 对象梳理从Activity中setContentView 为起点先给出结构Activity { Window { 实际对象类为 PhoneWindow } WindowManager { 实际对象类为 WindowManagerImpl WindowManagerGlobal { 单例对象 ViewRootImpl{ '根view' DecorView { LineaLayout { Bar {}

2021-06-17 18:04:46 586 2

原创 Android apk 项目一键打包并上传到蒲公英

项目一键打包并上传到蒲公英缘由:测试流程由打包找包准备上传填写更新信息然后上传过于复杂 所以想要简化开发阅读须知:需要读者了解如何在项目里面建立一个空的gradle plugin的过程,否则这篇文章不适合你开始分析我想要的效果是精简步骤 比如说输入某个 命令 .\gradlew xxxx就可以完成我想要的效果那么首先我们必须得熟知或者完成以下几点:包路径打包完成的回调入口设置参数 设置要传的参数使用gradle来开发基于以上几点开始开发最重要的一点 打包完成的回调

2020-06-01 15:01:15 1101

原创 HSDB 工具的初步使用

HSDBHSDB 是啥? 黑色大便? 全名为 Hotspot debugger启动 HSDB 工具HSDB 位于 jdk下的lib目录下的 sa-jdi.jar 中切换路径到sa-jdi.jar这个目录 通过命令 java -cp sa-jdi.jar sun.jvm.hotspot.HSDB要连接到的目标进程目标的进程id 在不同系统下查看方式不同注意:目标程序必须处于暂停状态可以通过ide工具 打个断点 让其停住 这样 才可以 Attach上连接到目标进程通过HSDB 的

2021-12-21 10:49:41 886

原创 ConstraintLayout 高级特性,工具总结

layout_constraintWidth用法: xml中app:layout_constrainedWidth="true"作用:使得该view的宽受限于他的约束app:layout_constrainedHeight="true"同理一个wrapcontent的view 的宽度随着内容变多最终是等于parent的宽度的 但实际上它的宽度不应改如此eg1: 水平方向上 v1 leftToLeft = parent ,rightToLeft = v2而v2 rightToRight = p

2021-08-25 16:57:29 1759

原创 自定义Looper/Handler模型 线程wait/notify版本 非poll版本

循环 public static class Looper { final static ThreadLocal<Looper> threadLooper = new ThreadLocal<>(); public static void prepare() { if (threadLooper.get() != null) { throw new RuntimeException("

2021-02-23 14:23:15 200

原创 使用ASM编写 打印方法运行的时间 代码分析

请先简单阅读下原文代码https://blog.youkuaiyun.com/weixin_44618248/article/details/107086410先看前一段代码 val startTimeLabel = newLabel() //标签 val endTimeLabel = newLabel() var startTimeIndex: Int = 0 override fun onMethodEnter() { super.onMethodEnter()

2020-07-08 14:58:05 619

原创 使用ASM编写 打印方法运行的时间

编写ASM 代码操作字节码 并打印方法运行时间package grg.app.buildsrc.methodimport org.objectweb.asm.*import org.objectweb.asm.commons.AdviceAdapter/** * 方法运行时间计时 * @param customTAG 自定义的打印tag */class AddTimeListener( val customTAG: String, methodVisitor: Metho

2020-07-02 16:10:16 573

原创 总结下ASM的ClassReader和ClassWriter的Flag值

总结下ASM的ClassReader和ClassWriter的Flag值最近在研究Asm和javaclass字节码相关的东西 但是对于ClassWriter 构造方法的flag值和ClassReader的accept方法的flag值 有些模糊和混淆 于此做个总结用以加强我的印象和分享ClassReaderaccpet方法 org.objectweb.asm.ClassReader#accept(org.objectweb.asm.ClassVisitor, int)第二个参数是 一个flag值 可

2020-07-01 09:58:12 2188 1

空空如也

空空如也

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

TA关注的人

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