自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛逼的Transform Plus | Transform进阶教程

前言之前写过一篇文章介绍了下关于Transform增量如何编写。这次我想展开说些别的。先抛出几个奇奇怪怪的问题。如果要写R文件内联的情况下,各位大佬会咋操作,可能会碰到什么问题? 如果Transform过期不让使用了,那么应该用那种方式抽象会比较好。最后就是一些我最近玩的一些简单asm相关的东西吧。AndroidAutoTrack开始装逼了如果要在R文件内联的情况下,可能会碰到什么问题?在安卓agp 4.1.0 版本上 R8已经做了这部分的内联操作了,完全不需要我们再去

2021-08-31 22:04:23 316 1

原创 官方推荐Flow,LiveData:那我走?

记得在之前掘金上看到Google开发者的账号发了一篇《从 LiveData 迁移到 Kotlin 数据流》的文章。在之前接触ViewModel和LiveDta的时候就有在思考,ViewModel和Repository之间交互,通过什么来实现。后来翻了一下资料,发现官方推荐在ViewModel和Repository通过Flow来作为桥梁进行交互。为了响应官方号召,我又一顿了解Flow。但在了解了Flow之后,当时心中就有大大的疑惑,Flow能够实现LiveData的功能,并且比LiveData功能更加

2021-08-30 21:09:37 1698 4

原创 Kotlin 的语法和高级特性

一 ????高阶函数代替回调1.1 无参示例fun main() { pay(Runnable { println("回调函数..") }) pay{ println("高阶函数..") }}fun pay(block: Runnable) { println("before block") block.run() println("end block")}fun pay(block: () -&g

2021-08-27 22:00:48 589 3

原创 Android 内存、I/O、网络、存储的优化思路

一 内存优化1.1 内存模型与分布上图是常见的java虚拟机的内存分布图: 方法区:主要存储虚拟机加载的类信息,常量,静态变量,及时编译器编译后的代码等数据。内存优化时这一部分主要考虑是不是加载了很多不必要的第三方库。这部分的内存减少主要是常量池的回收和类的卸载(类卸载条件:无引用,类加载器可卸载)。 堆:几乎所有的对象都在这个区域产生,该区域属于线程共享的区域,所以写代码时更要注意多线程安全。这个内存区域的大小变化主要是对象的创建和回收,比如:如果短时间内有大量的对象创建和回收

2021-08-26 17:39:27 236 1

原创 ArrayBlockingQueue源码解析(JDK1.8)

ArrayBlockingQueue是基于数组的先进先出的有界循环队列同样我们还是先上类的关系图从类的关系图中可以看出ArrayBlockingQueue继承一个抽象类和实现了两个接口,然后分别简单介绍一下:AbstractQueue:这里主要提供增删查等的相关操作 BlockingQueue:提供更多情况下的增删查等操作 Serializable:启用其序列化功能操作属性属性相关的源码 final Object[] items; int takeInde.

2021-08-25 22:11:40 149 6

原创 2021 提升Android开发效率的实战技巧

一 ????泛型 + 反射我们创建Activity的时候需要先设置布局setContentView(R.layout..) 如果使用了ViewModel,还得给每个Activity创建ViewModel.如果项目中Activity过多,无疑是写很多模板代码的,借助Java的泛型机制,我们可以在BaseAct,封装上述逻辑。1.1 示例先创建BaseActabstract class BaseAct<B : ViewDataBinding, VM : ViewModel>

2021-08-24 21:32:37 529 3

原创 Android 面试准备进行曲-Handler源码/面试题

前言关于Google 建议在主线程中更新UI (其实子线程也可以更新UI,但是不推荐)多线程同步更新UI ,容易使UI进入不可预测的状态。 将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新绘制等处理,最终实现异步消息的处理。(保证多线程安全 数据更新的顺序性)Handler 流程上图已经比较清晰地讲述了整个handler的过程其中牵扯到比较重要的 类有:处理器类(Handler) 消息队列类(MessageQueue) 循环器类(Looper)三

2021-08-23 22:06:23 179 2

原创 站在思想层面看MVX架构

程序的本质程序的本质在于模拟现实,但是有更明确的分工简单的一个例子: 我 写 代码。这是一个主谓结构: 主语->我,谓语->写,宾语->代码。现在让我们来面向视角看问题:代码: 是个物体,是用来 被 写 的 写: 是个动作,是用来 被 我执行的 我: 是个物体,是用来 执行 写 这个动作 写代码的。好,接着我们来面向对象写代码:首先,创建一个我,这是个物体,所以应该创建一个对象:public class Me {}然后,需要有代码,才能写,代码也

2021-08-21 21:46:47 287 2

原创 Android Jetpack组件-Room增删改

背景在项目中不可避免的使用数据库, 而三方框架又是五花八门, 在这中我就选择了google Jetpack组件中的Room创建Dao在room中Dao是一个接口, 通过@Dao注解进行修饰@Daopublic interface TestDao {}添加数据通过@Insert注解指定方法为添加数据方法, 默认处理模式为忽略当前数据由于在添加时有可能是一条数据,也有可能是一组数据,所以在这用的是可变数组@Insertvoid add(TestEntity...

2021-08-19 21:39:06 1993 5

原创 泛型使用到原理

为什么要有泛型所谓泛型,就是类型参数化,也就是说,数据的类型不是固定的String,Integer,而是作为参数传入的。比如:// String就是参数,是List构造函数的参数。List<String> list = new ArrayList<>();我们来看个更简单的例子: 现在有个需求,需要一个类,可以将任意String前面加上"Hello",后面加上"Android",然后能返回内容本身。我们实现如下: public class WrapperSt

2021-08-18 22:16:38 342 2

原创 面试官还问Handler?那我要给你讲个故事

来吧小兄弟,说说Handler怎么回事Handler的相关博客太多了,随便一搜都一大把,但是基本都是上来就贴源码,讲姿势,短时间不太好弄明白整体的关系,和流程.面试官,你坐好,听听我这个故事吹的怎么样?本文就以生活点餐的例子再结合源码原理进行解析。希望对你有一点帮助。 来,咱们进入角色。Handler,Looper,MessageQueue,Message的全程协作的关系就好比一个餐厅的整体运作关系Handler好比点餐员 Looper好比后厨厨师长。 MessageQueue好比订

2021-08-17 16:49:02 107 3

原创 拿来吧你,Compose尝鲜初体验!

前言Compose 正式版在七月份的尾巴如期而至,我也写了一份 Compose 版本的项目,Demo其实比较简单。地址:github.com/mCyp/Hoo。这已经是它的第三个版本:第一版:Kotlin + Jetpack 第二版:Flutter 第三版:Compose + Jetpack还记得去年 Compose 推出的时候,我就在团队内部分享了一次 Compose,当时为了展示一个 Preview 的功能,差点卡到下不了台。其实写代码的时候速度还可以,但是投屏时属实有

2021-08-16 22:20:25 579 1

转载 给Android应用设置DeviceOwner权限遇到的问题及解决方案

原文作者:岛哥的质量效能笔记原文链接:https://juejin.cn/post/6995906975477432357背景Android手机品牌和型号众多,特别是国产手机系统时常添加各种中国特色功能,因此其与设备管理员模式的兼容性或多或少存在一些问题,今天专门来讲讲我遇到的一些常见机型兼容性问题。注意事项设备管理员模式不需要反复连接电脑设置,只需要配置一次,重启或升级系统都没有影响。但是在执行命令之前需要对手机进行一些设置,具体如下:小米用户需要开启「USB 调试(安全设置)

2021-08-16 22:18:10 10636 5

原创 Flutter版聚合广告插件

Flutter版聚合广告插件flutter_universalad是一个聚合字节跳动穿山甲广告插件flutter_unionad、腾讯优量汇聚合广告flutter_tencentad插件,方便直接调用多个厂商广告,插件仓库。体验demo集成步骤1、pubspec.yamlflutter_universalad: ^0.0.32、引入import 'package:flutter_universalad/flutter_universalad.dart';使用1、SDK初始

2021-08-16 22:15:54 18035 3

原创 NA嵌入Flutter页面

目录介绍01.Android承载flutter容器 02.过时的NA跳转flutter方案 03.升级版本NA跳转Flutter处理 04.如何处理NA跳转flutter传参 05.思考遇到的几个问题分析 06.Flutter页面关闭时Crash 07.Android引入flutter本质 08.Flutter启动加载流程和优化00.推荐fluter Utils 工具类库:github.com/yangchong21… flutter 混合项目代码案例:github.com/yan

2021-08-16 22:13:24 255 2

空空如也

空空如也

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

TA关注的人

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