android studio
文章平均质量分 81
赵彦军
android开发工程师、烧菜能手、暖男
展开
-
Android DataStore 使用详解
Jetpack DataStore 是一种数据存储解决方案,允许您使用协议缓冲区存储键值对或类型化对象。DataStore 使用 Kotlin 协程和 Flow 以异步、一致的事务方式存储数据。原创 2022-10-19 11:26:22 · 7563 阅读 · 0 评论 -
Android硬件加速
Android 硬件加速原理Android 硬件加速原理理解Android硬件加速原理的小白文硬件加速控制(Controlling Hardware Acceleration)android提供了以下四个级别的硬件加速控制:ApplicationActivityWindowViewApplication级别在应用的Android清单文件中,把下列属性添加到元素中,能够开启整个应用程序的硬件加速:<application android:hardwareAccelerated=原创 2022-03-08 11:40:05 · 6187 阅读 · 0 评论 -
Android骨架屏实现方案
Skeletonhttps://github.com/ethanhua/Skeleton依赖引入buildscript { repositories { jcenter() }}allprojects { repositories { jcenter() }}dependencies { implementation 'com.ethanhua:skeleton:1.1.2' implement原创 2022-03-07 11:30:58 · 3762 阅读 · 0 评论 -
Android通过Scheme协议打开APP界面
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/123238777本文出自。原创 2022-03-03 14:21:48 · 11689 阅读 · 1 评论 -
Android Bitmap 研究与思考(中篇)
文章目录质量压缩采样率压缩矩阵缩放RGB_565压缩createScaledBitmap 压缩BitmapFactory.Options 属性介绍bitmap 保存为文件文件转为 bitmap高效加载大位图bitmap 转为 drawabledrawable 转为 bitmap总结质量压缩 private fun compressQuality() { //把 drawable 转成 bitmap val bm = BitmapFactory.decodeResourc原创 2022-02-25 17:48:09 · 1237 阅读 · 0 评论 -
android gradle自定义钉钉群提醒
今天接到一个需求,写一个 gradle 小插件,在执行完某个 gradle 任务后,向钉钉群聊机器人发送一条消息,并自动 @所有人。首先在钉钉群中创建智能机器人,并获取到 Webhook 链接有了 Webhook 链接就可以给机器人发消息了。下面我们来自定义 gradle 工具。在项目的跟目录创建 dingding.gradledingding.gradle 代码如下:import groovy.json.JsonBuilderimport groovy.json.JsonOutput原创 2022-02-16 20:10:04 · 1511 阅读 · 0 评论 -
Retrofit 注解参数详解
文章目录GET@Path@Query@QueryMapPOST@Bodyform表单1:@FormUrlEncodedform表单2:FormBody@Multipart上传文件对Retrofit已经使用了一点时间了,是时候归纳一下各种网络请求的service了。下面分为GET、POST、DELETE还有PUT的请求,说明@Path、@Query、@QueryMap、@Body、@Field的用法。添加依赖implementation 'com.squareup.retrofit2:retrofit原创 2021-10-28 15:54:54 · 1226 阅读 · 2 评论 -
Android 断点续传实现原理
下载原理在介绍断点续传之前,我们先说说下载的原理。代码示例用 OkHttp 作为示例。下载核心思路是把 responseBody 写入文件,核心代码如下:但是这种做法有个明显的问题,假如手机在下载文件的时候下载了80%,某些原因断网了,如果不支持断点续传,那就只有被迫重头开始下载。但是如果有断点续传的加持,就只需要下载最后 20% 的资源,避免重新下载。断点续传原理1、java.io.RandomAccessFile断点续传/下载需要使用到 java.io.RandomAccessFile 类原创 2021-10-25 17:36:19 · 1346 阅读 · 0 评论 -
Android Context Hook
Context Hook在 Android 编程中,我们常常会和 Context打交道,而且 Context 遍布各个地方,就算使用 Jetpack Compose 也都离不开它。正因为 Context 被广泛的使用和传播,当我们面对一些特殊问题时,常常能够从 Context对象入手,去解决许多看似不能改变的代码问题。这常常就会用到 Context Hook 这种手法。Context Hook 形式其实特别简单,就是使用 ContextWrapper 对原有的 Context 进行代理,从而实现 Con原创 2021-10-25 17:04:17 · 1651 阅读 · 0 评论 -
Android View Binding的使用
什么是View BindingView Binding是Android Studio 3.6推出的新特性,目的是为了替代findViewById(内部实现还是使用findViewById)。。在启动视图绑定后,系统会为改模块中的每个xml文件生成一个绑定类,绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。View Binding 的优点Null 安全:由于视图绑定会创建对视图的直接引用,因此不存在因视图 ID 无效而引发 Null 指针异常的风险。此外,如果视图仅出现在布局的某些配置原创 2021-10-13 21:08:52 · 1997 阅读 · 2 评论 -
Java线程安全Lock、ReentrantLock、ReentrantReadWriteLock
文章目录前言LockReentrantLock公平锁/非公平锁超时机制可重入锁读写锁 ReentrantReadWriteLock源码结构总结示例前言java5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁的功能,它提供了与synchronized关键字类似的同步功能。既然有了synchronized这种内置的锁功能,为何要新增Lock接口?先来想象一个场景:手把手的进行锁获取和释放,先获得锁A,然后再获取锁B,当获取锁B后释放锁A同时获取锁C,当锁C获取后,再释放锁B同时获取锁D,以此原创 2021-10-13 20:32:26 · 561 阅读 · 0 评论 -
Android ConstraintLayout ConstraintSet动态布局
在传统布局方式中,如果要改变某个控件的位置,需要获取 LayoutParams , 后台修改属性值就行了。但是在约束布局 ConstraintLayout 中,要改变控件的约束条件,需要用到 ConstraintSet 类。主要有 5 个步骤第一步:创建 ConstraintSet() 实例 val set = ConstraintSet()第二步:需要复制一份父布局的约束,方法有三个如下set.clone(constraintLayout: ConstraintLayout);set原创 2021-10-12 19:58:06 · 6117 阅读 · 1 评论 -
Android Annotation注解详解
文章目录Java注解元注解说明@Retention@Target通过反射获取注解信息方法使用注解方法的参数使用注解Java注解Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。Jav原创 2021-08-24 19:59:41 · 1860 阅读 · 5 评论 -
Android Kotlin Exception处理
Kotlin 的异常和 Java 的一样, try…catch…finally代码块处理异常,唯一一点不同是:Kotlin 的异常都是 Unchecked exceptions。checked exceptions 是必须在方法上定义并且处理的异常,比如 Java 的 IoException。@Throws(IOException::class)fun createDirectory(file: File) { if (file.exists()) throw IOExcept原创 2021-07-05 11:05:07 · 1802 阅读 · 0 评论 -
Android 监听APP进入前台、后台
文章目录方案一:利用ActivityLifecycleCallbacks监听所有activity的生命周期方案二:ProcessLifecycleOwner方案一:利用ActivityLifecycleCallbacks监听所有activity的生命周期import android.app.Activityimport android.app.Applicationimport android.os.Bundle/** * @author : zhaoyanjun * @time : 202原创 2021-06-17 11:57:39 · 2655 阅读 · 0 评论 -
Kotlin实战指南十九:use 函数魔法
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117365712本文出自【赵彦军的博客】文章目录往期精彩文章use函数往期精彩文章Kotlin实战指南十七:JvmField、JvmStatic使用Kotlin实战指南十六:Synchronized、VolatileKotlin实战指南十五:协程泄漏本文章转载于:Kotlin use函数的魔法use函数实现了Closeable接口的对象可调用use函数use函数会自动.原创 2021-05-28 16:48:18 · 2954 阅读 · 0 评论 -
Androidx ViewPager+Fragment 懒加载
这里写自定义目录标题前言懒加载(预加载)传统模式Androidx欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言还有一个月就过年了,超级开心。本文所有内容已经上传至github:htt原创 2021-02-02 14:43:51 · 1890 阅读 · 1 评论 -
Android 如何正确统计页面停留时长
在Android中经常有统计页面停留时长的需求,先看看以前的实现代码:class MainActivity2 : AppCompatActivity() { var startTime:Long = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2)原创 2021-01-12 20:29:10 · 2867 阅读 · 0 评论 -
Android 打造异常崩溃捕获工具
Thread.dumpStack()打印当前线程调用堆栈, 这个在调试时特别好用,举例如下:Util.javapublic class Util { public static void print(){ Thread.dumpStack(); }}MainActivity.javaclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: B原创 2021-01-11 20:16:37 · 1090 阅读 · 3 评论 -
Android 如何做一次内存泄漏大排查
前言眼瞅着还有一个月就过年,项目也没有那么忙了,技术老大要求做一做性能优化方面的工作。而我的任务就是把项目中的内存泄漏撸一遍,然后安排对应的人处理。说到内存泄漏,我也算是老手了,其实在 2016 年我就写个内存泄漏方面的文章:Android 如何有效的解决内存泄漏的问题把内存泄漏的地方找出来说干就干,首要的任务就是把内存泄漏的代码揪出来,我选择 leakcanarygithub 地址:https://github.com/square/leakcanary/关于 leakcanary 的介绍原创 2021-01-07 21:11:46 · 1800 阅读 · 3 评论 -
Android 跨进程通信大总结
文章目录1、Android进程2、修改Android默认进程3、指定activity、Service进程1、Android进程android { compileSdkVersion 29 buildToolsVersion "29.0.3" defaultConfig { applicationId "com.zhaoyanjun" minSdkVersion 16 targetSdkVersion 29 vers原创 2020-12-22 16:04:55 · 5095 阅读 · 1 评论 -
Android RecyclerView ItemDecoration 分割线
文章目录如何设置分割线DividerItemDecoration使用如何设置分割线RecycleView 没有像ListView一样可以直接在 xml 中或者通过 setDivider()方法设置分割线的方法。它是通过 RecycleView 的 addItemDecoration(ItemDecoration decor) 方法来设置的。很显然,我们需要传入一个 ItemDecoration 对象,这个对象是一个抽象类,官方已经提供了一种常用分割线类:DividerItemDecoration。来看一原创 2020-12-16 21:23:00 · 2397 阅读 · 3 评论 -
Android RecyclerView 性能优化总结
目录相关文章recyclerView.setHasFixedSize(true);LinearLayoutManager.setInitialItemPrefetchCount()局部刷新DiffUtilAsyncListDiffgetExtraLayoutSpace避免创建过多 OnClickListener 对象复用RecycledViewPool减少过度绘制相关文章https://blog.csdn.net/smileiam/article/details/88396546https://zhu原创 2020-12-15 21:14:26 · 677 阅读 · 0 评论 -
Fiddler抓包使用教程-Https
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72956016 本文出自【赵彦军的博客】 开启 Https 抓包Fiddler 默认下,Fiddler不会捕获HTTPS会话,需要你设置下。from all processes : 抓取所有的 https 程序, 包括 本机 和 手机 from brow原创 2017-06-09 11:39:11 · 12888 阅读 · 1 评论 -
Fiddler抓包使用教程-过滤
Fiddler抓包使用教程-过滤 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72929800 本文出自【赵彦军的博客】 Fiddler抓包可以完成我们移动开发者的调试测试需求。但是多余的网页请求和手机的其他链接影响我们手机开发的需求。所以我们需要排除其他无用的包,只关注我们指定的域名的请求包。如下图,先原创 2017-06-09 10:31:08 · 13910 阅读 · 1 评论 -
Fiddler抓包使用教程-会话图标
Fiddler抓包使用教程-会话图标 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72933882 本文出自【赵彦军的博客】 使用fiddler抓包时,会看到左侧按照顺序显示session,并且前边有个图标,但通常,不知道图标是什么意思。 参考官方文档:UIGuide这里尤其注意“锁图标”这里写图原创 2017-06-08 18:41:54 · 5671 阅读 · 0 评论 -
Android Studio 版本号详解
Android Studio 版本号详解android { compileSdkVersion 25 //是指本地开发环境编译是时的 Android 版本 buildToolsVersion "25.0.2" //你构建工具的版本,其中包括了打包工具aapt、dx等等 defaultConfig { applicationId "com.app"原创 2017-04-10 17:21:10 · 5640 阅读 · 0 评论 -
Fiddler抓包使用教程-乱码处理 Decode
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73350344 本文出自【赵彦军的博客】 在 Fiddler 的工具栏中有一个 Decode 功能,一直不知道是干嘛用的.从一个简单的接口说起最近在调试一个接口,服务器返回值只有一个数字:1 。 但是在 Fiddler 上看到的确实这样的:可以看到原创 2017-06-19 13:55:37 · 16940 阅读 · 0 评论 -
Fiddler抓包使用教程-模拟低速网络环境
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73467267 本文出自【赵彦军的博客】 在无线测试中,网络测试是必不可少的环节,通过网络限速查看页面渲染等效果,能有效保障低速网络下的用户体验和页面性能。Fiddler可通过延迟发送或接收数据的时间来限制网络的下载速度和上传速度,从而达到限速的效果。开启限速原创 2017-06-19 14:24:08 · 1899 阅读 · 0 评论 -
Fiddler抓包使用教程-QuickExec
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73468287 本文出自【赵彦军的博客】 在 Fiddler 中自带了一个 QuickExec 命令行,用户可以直接输入并快速执行脚本命令。常见命令help打开官方的使用页面介绍,所有的命令都会列出来?列表中把包含 baid.com原创 2017-06-19 15:48:57 · 2187 阅读 · 0 评论 -
Fiddler抓包使用教程-Android应用抓包
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/74439165 本文出自【赵彦军的博客】 Fiddler 也可以支持对手机应用进行 http 抓包的 。1、启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框。2、在Fiddler原创 2017-07-05 14:41:14 · 2658 阅读 · 0 评论 -
Fiddler抓包使用教程-断点调试
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/62896784 本文出自【赵彦军的博客】 Fiddler 里面的断点调试有2种方式。一种用工具栏中的按钮来设置断点,特点是会拦截所有的请求。一种用命令行的形式来设置断点 , 特点是拦截某个请求。工具栏断点Before Requests : 在请求原创 2017-07-07 17:51:05 · 4081 阅读 · 0 评论 -
Android Lifecycle 生命周期组件详解
dsd一、Lifecycle简介为什么要引进Lifecycle?我们在处理Activity或者Fragment组件的生命周期相关时,不可避免会遇到这样的问题:我们在Activity的onCreate()中初始化某些成员(比如MVP架构中的Presenter,或者AudioManager、MediaPlayer等),然后在onStop中对这些成员进行对应处理,在onDestroy中释放这些资...原创 2019-08-17 18:10:37 · 1400 阅读 · 0 评论 -
Fiddler抓包使用教程-扫盲篇
Fiddler抓包使用教程-扫盲篇 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72823370 本文出自【赵彦军的博客】 1、什么是抓包?不同主机之间的数据通信都是通过网络来进行传输,对那些在网络上传输的数据(发送、请求的数据)进行截获、编辑、转存等操作叫做抓包。抓包可以是抓取电脑端请求的数据,还可原创 2017-05-31 20:05:48 · 13900 阅读 · 0 评论 -
Android Gradle 自定义Task详解二:进阶
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自【赵彦军的博客】 Mapping 文件的保存通常我们在打包的时候,会开启混淆。开启混淆会产生 mapping 文件。mapping 文件存在的目录如下图所示:mapping 文件其实就是所混淆的类名前后对照,为了以后查看方便,我们需要在每次打包完成后把原创 2017-11-14 19:24:54 · 13322 阅读 · 4 评论 -
Android Loader 异步加载详解一:基础概念
前言Android 3.0 中引入了 Loader (加载器),支持轻松在 Activity 或片段中异步加载数据。 加载器具有以下特征:可用于每个 Activity 和 Fragment。支持异步加载数据。监控其数据源并在内容变化时传递新结果。在某一配置更改后重建加载器时,会自动重新连接上一个加载器的游标。 因此,它们无需重新查询其数据。Loader API概述说明如下是我们开发中常用的原创 2017-04-19 18:06:04 · 1087 阅读 · 0 评论 -
Android Loader 异步加载详解二:探寻Loader内部机制
在上一篇文章中,讲解了 Loader 的基本概念。这一篇将会用实战的方式来探寻 Android Loader的内部机制。我们准备做一个 读取手机短信的例子。废话不多说,直接上效果图:所有的代码都在:https://github.com/zyj1609wz/Loader实例源码首先 SmsActivity 的源码package com.app.loader.sms;import android.原创 2017-04-20 15:09:11 · 943 阅读 · 1 评论 -
Android 监听 WiFi 开关状态
WifiSwitch_Presenter 源码:package com.yiba.wifi.sdk.lib.presenter;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentF原创 2017-04-27 14:43:45 · 2257 阅读 · 0 评论 -
Android Git 常用命令和规范
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70332707 本文出自【赵彦军的博客】在 Android Studio 中要操作 Git 服务,有两种方式,它们分别是 GUI 和 命令行方式,今天就着重介绍 命令行 方式操作 Git 服务 。首先在 Android Studio 里面找到 命令行窗口,如下图所示:概念git原创 2017-04-21 17:40:22 · 3811 阅读 · 0 评论 -
Android 获取系统语言(兼容7.0)
前言获取系统当前语言是一个比较常用的功能,在 Android 7.0 系统上旧函数获取到的当前系统语言并不正确,或者说从 Android 7.0 起,Android 系统语言的规则变了。下面是未适配 Android 7.0 的代码://获取 Locale 的方式有二//方式一Locale locale = getResources().getConfiguration().locale;//方式二转载 2017-05-16 14:29:41 · 1009 阅读 · 0 评论