Android 开发
文章平均质量分 95
hi-dhl
包含 Jetpack ,Kotlin ,Android 10 系列源码,译文,LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题 等等一系列文章
展开
-
13这些权限废弃,你的应用受影响了吗?
在 Android 13 上废弃了文件访问权限,提供了一种选择媒体文件的工具,代替这些废弃的 API,而不需要授予对其整个媒体库的访问权限原创 2022-11-08 09:51:27 · 571 阅读 · 1 评论 -
谁动了我的内存,揭秘 OOM 崩溃下降 90% 的秘密
Kotlin 和 Java 泛型局限性、泛型擦除,泛型信息被擦除了之后,泛型信息保存到哪里,迷惑的通配符和星投影区别原创 2022-08-29 09:46:48 · 243 阅读 · 0 评论 -
解密Kotlin1.6.20新功能ContextReceiver
一起来聊一下 Kotlin 1.6.20 的新功能`Context Receivers,来看看它为我们解决了什么问题,以及如何使用原创 2022-05-10 13:51:07 · 549 阅读 · 0 评论 -
Stack Overflow 上最热门的 10 个 Kotlin 问题
这是 Stack Overflow 上最热门的几个 Kotlin 问题,这篇文章每个问题,都是一个知识点, 后面我会针对每个问题,单独写一篇文章,进行更加深入的分析。原创 2022-04-15 11:06:03 · 2623 阅读 · 0 评论 -
避免滥用 Kotlin 扩展函数
是避免滥用扩展函数, 而不是禁止,在 Kotlin 中除了为类定义扩展函数之外,还可以定义成员扩展,甚至还可以在接口中定义扩展。原创 2021-12-29 00:44:45 · 296 阅读 · 0 评论 -
Android 12 已来,你的 App 崩溃了吗?
在 Android 12 中包含了很多的功能和一些行为的变更,一起来分析这些行为的变更对我们的应用产生了那些影响原创 2021-12-21 08:48:38 · 2398 阅读 · 1 评论 -
Kotlin 宣布一个特性 value class
Kotlin 1.5 宣布了一个重磅特性 value class,这是一个非常实用的特性,提高代码的可读性同时,还可以提高性能,因为编译器会对它进行更深层次的优化,减少对象的创建。随着 Kotlin 不断的完善,出现了一系列的特性 inner class 、 data class 、 sealed class 、sealed interface 、inline class 、value class 等等,之前写过几篇文章专门分析 sealed class 和 sealed interface,可以点击下原创 2021-11-14 14:01:06 · 3125 阅读 · 2 评论 -
Google 宣布废弃 LiveData.observe 方法
本篇文章作为技术动态了解即可,废弃 LiveData.observe() 扩展方法,已经不是什么新的新闻了,在很久以前,Google 废弃掉这个方法的时候,第一时间我在 朋友圈 和 掘金沸点 发过一个消息,如下图所示。通过这篇文章你将学习到以下内容:为什么增加 LiveData.observe() 扩展方法?既然增加了,为什么有要废弃 LiveData.observe() 扩展方法?Kotlin 1.4 语法的特性什么是函数式(SAM)接口?什么是 SAM 转换?为什么废弃 Liv原创 2021-11-14 13:58:23 · 1670 阅读 · 0 评论 -
图解 ArrayDeque 比 LinkedList 快
hi 大家好,我是 DHL。公众号:ByteCode ,专注分享最新技术原创文章,涉及 Kotlin、Jetpack、算法动画、系统源码、 LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题 等等。在之前的两篇文章中主要分析了 Java 栈的缺点 ,为什么不推荐使用 Java 栈 ,以及 为什么不推荐直接使用 ArrayDeque 代替 Java Stack 。更多内容点击下方链接前去查看。算法动画图解 | 被 “废弃” 的 Java 栈,为什么还在用为什么不推荐 Arr..原创 2021-10-07 18:49:19 · 475 阅读 · 1 评论 -
为什么不推荐 ArrayDeque 代替 Stack
公众号:ByteCode,致力于分享最新技术原创文章,涉及 Kotlin、Jetpack、译文、系统源码、 LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题 等等一系列文章。这篇文章源于对 stack-vs-deque 文章的思考,也是对我上一篇文章 算法动画图解 | 被 “废弃” 的 Java 栈,为什么还在用 内容的补充。通过这篇文章你将学习到以下内容:为什么不推荐使用 Java 栈JDK 推荐使用 ArrayDeque 代替 Stack 真的合理吗如何实现一个真.原创 2021-10-07 18:47:42 · 360 阅读 · 0 评论 -
算法动画图解 | 被 “废弃“ 的 Java 栈,为什么还在用
公众号:ByteCode,致力于分享最新技术原创文章,涉及 Kotlin、Jetpack、译文、系统源码、 LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题 等等一系列文章。在 LeetCode 上不知不觉已经刷了 210+ 题,总提交次数 1000+ 次,从这篇文章开始,每篇算法类型的文章,将会做成动画的形式,每篇文章都会用 Java 和 kotlin 去实现,并且每道题目都有解题思路、时间复杂度、空间复杂度和源代码,更多内容点击下方链接前去查看。剑指 Offer 及国内.原创 2021-09-18 09:15:03 · 429 阅读 · 0 评论 -
影响性能的 Kotlin 代码(一)
要开始写新的 Kotlin 系列了 「影响性能的 Kotlin 代码」, 同时我也在写另一个系列 「为数不多的人知道的 Kotlin 技巧及解析」,没有看过的小伙伴,可以点击下方链接前去查看。为数不多的人知道的 Kotlin 技巧及解析(一)为数不多的人知道的 Kotlin 技巧及解析(二)为数不多的人知道的 Kotlin 技巧及解析(三)Kotlin 高级函数的特性不仅让代码可读性更强,更加简洁,而且还提高了生产效率,但是简洁的背后是有代价的,隐藏着不能被忽视的成本,特别是在低端机上,这种成本原创 2021-09-02 09:10:48 · 836 阅读 · 0 评论 -
Jetpack Splashscreen 解析 | 助力新生代 IT 农民工 事半功倍
Jetpack 家族迎来了一位新的成员 Core Splashscreen,所以我也要重新开始写 Jetpack 系列文章了,在这之前写过一系列 Jetpack 文章以及配套的实战应用,包含 App Startup 、 Paging3 、 Hilt 、 DataStore 、ViewBinding 等等实战项目,点击下方链接前去查看。AndroidX-Jetpack-Practice 系列实战项目Kotlin 插件的落幕,ViewBinding 的崛起竟然如此简单,DataBinding 和 Vie原创 2021-08-18 09:19:04 · 359 阅读 · 0 评论 -
为数不多的人知道的 Kotlin 技巧及解析(三)
本文没有什么奇淫技巧,都是一些在实际开发中常用的技巧Google 引入 Kotlin 的目的就是为了让 Android 开发更加方便,自从官宣 Kotlin 成为了 Android 开发的首选语言之后,已经有越来越多的团队,在项目使用 Kotlin。众所周知 xml 十分耗时,因此在 Android 10.0 上新增加 tryInflatePrecompiled 方法,这是一个在编译期运行的一个优化,因为布局文件越复杂 XmlPullParser 解析 XML 越耗时, tryInflatePrec.原创 2021-08-04 01:11:04 · 704 阅读 · 0 评论 -
揭秘 Kotlin 中的 == 和 ===
之前分别写了三篇文章,从原理、优化、实战、新特性(密封接口)以不同的角度分别介绍了 Sealed Classes。Kotlin 密封类进化了Kotlin 中的密封类 优于 带标签的类Kotlin Sealed 是什么?为什么 Google 都在用而这篇文章我们主要来分析 Kotlin 中的操作符 == 和 === 的区别,以及它们分别在什么场景下使用。这些操作符在实际项目和开源项目中,使用的频率非常的高。主要包含以下内容:Java 中的 == 和 equals 的区别?Kotlin .原创 2021-07-15 09:21:27 · 4417 阅读 · 0 评论 -
Kotlin 密封类进化了
这是 Sealed Classes(密封类)系列的第三篇文章,之前的文章从原理、优化、实战以不同的角度分别介绍了 Sealed Classes 的强大。在 Kotlin Sealed 是什么?为什么 Google 都在用 文章中主要包含以下内容:Sealed Classes 原理分析?枚举、抽象类、Sealed Classes 分别有那些优缺点?分别在什么情况下使用枚举和 Sealed Classes?为什么 Sealed Classes 用于表示受限制的类层次结构?在项目中如何使用 S.原创 2021-06-29 10:32:12 · 263 阅读 · 1 评论 -
Kotlin 中的密封类 优于 带标签的类
在之前的文章中我也分析过 Sealed Classes 原理,以及 Google 和很多开源项目为什么都在大量的使用它,如果你对 Sealed Classes 还不是很了解,可以前往查看 Kotlin Sealed 是什么?为什么 Google 都在用 主要内容如下:Sealed Classes 原理分析?枚举和抽象类都有那些局限性?为什么枚举可以作为单例?枚举作为单例有那些优点?分别在什么情况下使用枚举和 Sealed Classes?Sealed Classes 究竟是什么?为什么 .原创 2021-06-18 08:50:01 · 176 阅读 · 0 评论 -
LeetCode 从 0 到 200 学到了什么
LeetCode 不知不觉刷了 210 题,总提交次数 1069 次,想写一篇文章,跟大家聊聊 LeetCode 刷题感受以及经验,主要包含以下内容。LeetCode 刷题历程?为什么刷题?刷题真的能找到工作吗?如何刷题?平时除了刷 LeetCode,同时也会做 Daily Coding Problem 上面的题目,Daily Coding Problem 包含了很多国外大厂(Google、FaceBook、Uber、Amazon 等等)的算法题,我也在刷题过程中梳理了一些题目和题解,为了.原创 2021-05-21 08:38:27 · 261 阅读 · 0 评论 -
Android 12 行为变更,对应用产生的影响
公众号:ByteCode,致力于分享最新技术原创文章,涉及 Kotlin、Jetpack、译文、系统源码、 LeetCode / 剑指 Offer / 多线程 / 国内外大厂算法题 等等一系列文章。众所周知在春节过后 Google 发布了 「 Android 12 首个开发者预览版 」,3 月份的时候发布了 「 开发者预览版 2 」,在 Android 12 中让人眼前一亮的是系统界面做了很大改动,根据 Google 今年的发版计划,预计在今年 9 月份正式版将会发出来。在 Android 12..原创 2021-04-17 18:46:07 · 5351 阅读 · 1 评论 -
图解多平台 AndroidStudio 技巧(三)
好的 idea 能提高我们的工作效率,如果掌握一些快捷键,能帮我们从繁琐重复的工作中解放出来,写代码的效率就越高。近期在开发过程中发现了一些非常好用的快捷键分享给小伙伴们,在之前的文章中我也分享过一些常用的快捷键,可以点击下列链接前往查看。图解多平台 AndroidStudio 技巧(一)图解多平台 AndroidStudio 技巧(二)文章中没有奇淫技巧,都是一些在实际开发中、阅读源码的时候常用的快捷键,可能这些快捷键之前用过,但是在不同场景下有不同的用法,强烈建议收藏。软件环境:Ma.原创 2021-01-30 12:01:11 · 212 阅读 · 0 评论 -
竟然如此简单,DataBinding 和 ViewBinding
前言首先祝小伙伴们新年快乐,2020 一个不平凡的一年,2021 是你我新的起点。2021 新签名:代码不止,文章不停。2021 第一篇文章是对 2020 年末最后一篇文章 Kotlin 插件的落幕,ViewBinding 的崛起 的一个补充。在之前的文章 Kotlin 插件的落幕,ViewBinding 的崛起 中介绍了 Google 为什么不建议在项目中使用 Kotlin 合成方法(Synthetic 视图), Google 建议使用 ViewBinding 替换 Kotlin 合成方法,.原创 2021-01-07 08:44:24 · 6766 阅读 · 1 评论 -
Kotlin 插件的落幕,ViewBinding 的崛起
前言最近小伙们应该都会收到 Kotlin 1.4.20 的升级通知,在 Kotlin 1.4.20 中做了一个重要的更新 如下图所示:简单总结一下,主要有以下几点:废弃了 kotlin-android-extensions 编译插件Parcelable 相关的功能,移到了新的插件 kotlin-parcelize按照 Google 的解释,kotlin-android-extensions 插件只会保留至少一年的时间,将会在 2021 年 9 月或之后的 Kotlin 版本中将被移除.原创 2020-12-18 09:14:33 · 1390 阅读 · 0 评论 -
[Google] 再见 SharedPreferences 拥抱 Jetpack DataStore
Google 新增加了一个新 Jetpack 的成员 DataStore,主要用来替换 SharedPreferences, DataStore 应该是开发者期待已久的库,DataStore 是基于 Flow 实现的,一种新的数据存储方案,它提供了两种实现方式:Proto DataStore:存储类的对象(typed objects ),通过 protocol buffers 将对象序列化存储在本地,protocol buffers 现在已经应用的非常广泛,无论是微信还是阿里等等大厂都在使用,我们在.原创 2020-10-16 14:17:35 · 1895 阅读 · 1 评论 -
Kotlin StateFlow 搜索功能的实践 DB + NetWork
前言在之前分享过一篇文章 Google 推荐在 MVVM 架构中使用 Kotlin Flow ,在这篇文章中分析了如何在 MVVM 架构中使用 Kotlin Flow,以及 Kotlin Flow 为我们解决了以下问题:LiveData 是一个生命周期感知组件,最好在 View 和 ViewModel 层中使用它,如果在 Repositories 或者 DataSource 中使用会有几个问题它不支持线程切换,其次不支持背压,也就是在一段时间内发送数据的速度 > 接受数据的速度,Live.原创 2020-10-08 21:40:51 · 3014 阅读 · 1 评论 -
Google 推荐在 MVVM 架构中使用 Kotlin Flow
前言在之前分享过一篇 Jetpack 综合实战应用 神奇宝贝(PokemonGo) 眼前一亮的 Jetpack + MVVM 极简实战 ,这个项目主要包了以下功能:自定义 RemoteMediator 实现 network + db 的混合使用 ( RemoteMediator 是 Paging3 当中重要成员 )使用 Data Mapper 分离数据源 和 UIKotlin Flow 结合 Retrofit2 + Room 的混合使用Kotlin Flow 与 LiveData 的使用.原创 2020-08-25 09:06:21 · 1757 阅读 · 4 评论 -
Kotlin Sealed 是什么?为什么 Google 都用
写这篇文章之前,做了很多调研,查阅了很多资料,文章也反复推敲打磨了很多遍,为什么我要去做这么多的调研工作,因为 Sealed Classes 概念很简单,但是想要写好它很难,由于目前我对 Sealed Classes 的理解也有限,所以做了很多工作。希望这篇文章的内容不会让小伙伴们失望,如果你对 Sealed Classes 有独到的理解,也欢迎在评论区和大家一起分享。在上一篇文章 Google 推荐在项目中使用 Sealed 和 RemoteMediator 中介绍了如何使用 Sealed Class.原创 2020-08-25 09:04:55 · 3538 阅读 · 2 评论 -
Jetpack 新成员 AndroidX App Startup 实践以及原理分析
前言前几天 Google 更新了几个 Jetpack 新成员 Hilt、Paging 3、App Startup 等等,周末空闲时间实践了一下 App Startup 可以前去查看 GitHub 上的项目 AndroidX-Jetpack-Practice ,接下来一起来分析一下 AndroidX App Startup。通过这篇文章你将学习到以下内容:App Startup 是什么?App Startup 为我们解决了什么问题?为什么无论是 Google 还是第三方库,初始化时都会在 Con.原创 2020-08-19 08:15:39 · 1731 阅读 · 0 评论 -
Google 推荐在项目中使用 sealed 和 RemoteMediator
之前分享过一篇 Jetpack + MVVM 综合实战应用 神奇宝贝(PokemonGo) 眼前一亮的 Jetpack + MVVM 极简实战 主要包了以下功能:自定义 RemoteMediator 实现 network + db 的混合使用 ( RemoteMediator 是 Paging3 当中重要成员 )使用 Data Mapper 分离数据源 和 UIKotlin Flow 结合 Retrofit2 + Room 的混合使用Kotlin Flow 与 LiveData 的使用使.原创 2020-08-03 09:14:46 · 1883 阅读 · 0 评论 -
神奇宝贝 眼前一亮的 Jetpack + MVVM 极简实战
前言Jetpack 实战项目 PokemonGo(神奇宝贝)基于 MVVM 架构和 Repository 设计模式,PokemonGo 项目中用到的技术,都是之前写过的一系列文章里面涉及到的知识点:Paging3(network + db),Dagger-Hilt,App Startup,DataBinding,Room,Motionlayout,Kotlin Flow,Coil,JProgressView 等等。项目 PokemonGo 已经上传到 GitHub: https://github.c.原创 2020-07-27 23:21:25 · 13551 阅读 · 4 评论 -
如何在项目中封装 Kotlin + Android Databinding
文章首发于掘金 https://juejin.im/post/5e9c434a51…在之前的文章 0xA05 Android 10 源码分析:Dialog 加载绘制流程以及在 Kotlin、DataBinding 中的使用 分析了 Dialog 加载绘制流程、设计模式,以及基于 DataBinding 封装的 DataBindingDialog 的基础库 JDataBinding,这篇文章主...原创 2020-05-02 18:42:43 · 841 阅读 · 1 评论 -
0xA01 Android 10 源码分析:APK 是如何生成的
前言文中地址如果不能访问,需要科学上网在Android Studio中直接点击 Run ‘app’ 就可以在build/outputs/apk生成可以在android设备中安装的Apk文件,那么Apk生成的过程是怎么样的呢?Apk文件大概可以分为两个部分:代码和资源,所以打包的也分为代码和资源两个部分,我们可以根据Google提供的流程图来具体了解一个Apk的构建过程新版构建流程图...原创 2020-02-20 00:16:00 · 1030 阅读 · 0 评论 -
基于Smali文件 Android Studio 动态调试 APP
最近在研究动态调试技术,网上关于基于Smali动态调试App的教程很多,很多细节都没有贴出来,走了很多弯路,将调研结果分享一下,如果有写的不好地方,欢迎指正github:https://github.com/hi-dhl/DebugApkSmali准备工作一部Root过的Android手机,打开开发者模式Xposed的运行的环境安装smalidea插件,点击这里下载安装BDOp...原创 2019-08-19 00:41:29 · 414 阅读 · 0 评论 -
解决在Android Studio 3.2找不到Android Device Monitor工具
升级到AndroidStudio最新版本(>3.2)朋友们都会遇到一个问题,找不到DDMS [Android Device Monitor], 只能从SDK目录下找到 monitor 启动DDMS [Android Device Monitor],所以写了一个插件快速启动Android Device Monitor源码及使用方式开发工具:IntelliJ IDEAPS: 如果有需要...原创 2019-08-19 00:40:25 · 2268 阅读 · 1 评论 -
EventBus3.1用法详解
EventBus介绍EventBus是Android和Java的发布/订阅事件总线。从EventBus3.1开始支持普通Java(非android)项目。GitHub的地址为什么使用EventBus简化了应用程序内各组件间、组件与后台线程间的通信解耦事件发送方和接收方开销小、快、代码更优雅、体积小(~50k jar)避免复杂和容易出错的依赖关系和生命周期问题EventBus的三...原创 2019-08-19 00:38:42 · 1175 阅读 · 0 评论 -
关于adb命令你所需要知道的
概述Android Debug Bridge (adb) 是一个通用命令行工具,是Android 开发/测试人员必备工具,关于adb的详细介绍可以查看谷歌adb官方中文文档 Android Debug Bridge, 这里只是总结了一下常用的命令文章中的命令说明文章中的命令只针对于连接一个设备的情况,如果连接多个设备,需要在 adb shell -s 后面指定设备序列号, 格式如下所示:...原创 2019-08-19 00:37:10 · 497 阅读 · 0 评论 -
获取视频截图
最近在搞一个视频截图的功能,自己在探索过程中,看到很多各种各样的解法,走了很多弯路,为了避免做相同功能的朋友们走很多弯路,我把自己解决方案,及探索过程遇到的Bug记录下来,目前已经适配大部分机型,对于个别机型不能使用的欢迎issuses Github下载最开始想的是直接用View截图的方式截取当前的视频,结果截取的来的图片是黑屏,附上View截图代码public Bitmap conve...原创 2019-06-27 19:25:51 · 873 阅读 · 0 评论 -
Android详细的对话框AlertDialog.Builder使用方法
我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框。当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,原创 2013-09-27 16:32:56 · 758 阅读 · 0 评论 -
通过XML设置屏幕方向(android:screenOrientation)详解
注意:android只支持270度旋转。android:label="@string/app_name"android:screenOrientation="portrait">android:screenOrientation设定该活动的方向, 该值可以是任何一个下面的字符串:"unspecified"- 默认值. 由系统选择显示方向. 在不同的设备可能会原创 2013-09-24 19:10:04 · 1224 阅读 · 0 评论 -
ViewParger 使用
什么是ViewPager呢? 它是实现左右两个屏幕平滑地切换的一个类,它是Google提供的,作为Android的一个补充。先上个效果图把,让大家有个直观的认识。官方的描述:请参考:http://developer.android.com/sdk/compatibility-library.html#Notes源码:http://download.csdn.net/d...原创 2013-10-27 16:36:34 · 1263 阅读 · 0 评论 -
Android 开发环境安装搭载
1、环境搭建1.1、JDK安装。设置环境变量步骤如下:我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量: JAVA_HOME值为: D:\Program Files\Java\jdk1.6.0_18(你安装JDK的目录)CLASSPATH值为:.;%JAVA_HOME%\bin; Path: 在开始追加 %JAVA_HOME%\bin; NOTE:前面四步原创 2013-09-15 21:23:24 · 1208 阅读 · 0 评论