hegan2010
码龄7年
  • 36,221
    被访问
  • 43
    原创
  • 57,899
    排名
  • 7
    粉丝
关注
提问 私信
  • 加入CSDN时间: 2015-10-22
博客简介:

hegan2010的博客

博客描述:
默认标题
查看详细资料
  • 2
    领奖
    总分 157 当月 11
个人成就
  • 获得8次点赞
  • 内容获得13次评论
  • 获得45次收藏
创作历程
  • 5篇
    2022年
  • 29篇
    2021年
  • 11篇
    2020年
  • 11篇
    2019年
  • 7篇
    2018年
成就勋章
兴趣领域 设置
  • 移动开发
    android studio
  • 职场和发展
    面试
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

[译] App Startup 使用介绍

官方文档:https://developer.android.com/topic/libraries/app-startup文章目录配置在应用启动时初始化组件实现组件初始化器设置清单条目运行 lint 检查手动初始化组件禁用单个组件的自动初始化禁用所有组件的自动初始化手动调用组件初始化器App Startup 库提供了一种在应用程序启动时初始化组件的简单、高效的方法。库开发人员和应用程序开发人员都可以使用 App Startup 来简化启动顺序并明确设置初始化顺序。App Startup 允许您定义共
翻译
发布博客 2022.05.09 ·
6 阅读 ·
0 点赞 ·
0 评论

[转] 感受异或的神奇

原文:感受异或的神奇 - 金马的Blog什么是异或?Wikipedia的解释:在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^)。但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真。转化为命题,就是:“两者的值不同。”或“有且仅有一个为真。”定义:1 ⊕ 1 = 00 ⊕ 0 = 01 ⊕ 0 = 10 ⊕ 1 = 1真值表:
转载
发布博客 2022.04.24 ·
8 阅读 ·
0 点赞 ·
0 评论

[转] Android Miracast投屏入门

原文:https://www.codetd.com/article/12138544哇,打开新世界了。SOS……遇到问题查看资料,中英文该看的都不落下。官配1. AOSP源码:Miracast Sink端源码最早出现在Android 4.2.2上,通过googlesource可以很方便的查看:https://android.googlesource.com/platform/frameworks/av/+/android-4.2.2_r1.2/media/libstagefright/wifi-d
转载
发布博客 2022.04.11 ·
79 阅读 ·
0 点赞 ·
0 评论

Android 基于 DroidAssist 插件实现无埋点

DroidAssistDroidAssist (源码) 是一个轻量级的 Android 字节码编辑插件,基于 Javassist 对字节码操作,根据 xml 配置处理 class 文件,以达到对 class 文件进行动态修改的效果。和其他 AOP 方案不同,DroidAssist 提供了一种更加轻量,简单易用,无侵入,可配置化的字节码操作方式,你不需要 Java 字节码的相关知识,只需要在 Xml 插件配置中添加简单的 Java 代码即可实现类似 AOP 的功能,同时不需要引入其他额外的依赖。使用方式
原创
发布博客 2022.02.11 ·
1239 阅读 ·
0 点赞 ·
0 评论

Android Gradle Transform 学习

build.gradle:plugins { id 'java' //id 'groovy' id 'org.jetbrains.kotlin.jvm' version '1.5.31' id 'java-gradle-plugin'}repositories { google() mavenCentral()}java { sourceCompatibility = JavaVersion.VERSION_1_8 targetC
原创
发布博客 2022.01.06 ·
1127 阅读 ·
0 点赞 ·
0 评论

Android 12 SplashScreen 应用启动画面

从 Android 12 开始,在所有应用的冷启动和温启动期间,系统一律会应用 Android 系统的默认启动画面。默认情况下,此系统默认启动画面由应用的启动器图标元素和主题的 windowBackground(如果是单色)构成。注:实际测试发现如果 windowBackground 为一张图片,则会从这种图里提取出单色。假如有一个 SplashActivity 使用了这样的主题(img_splash_new 为一张有图片文字的图): <style name="Theme.SplashTe
原创
发布博客 2021.12.17 ·
2318 阅读 ·
0 点赞 ·
0 评论

[译]从 LiveData 迁移到 Kotlin Flow

原文:https://medium.com/androiddevelopers/migrating-from-livedata-to-kotlins-flow-379292f419fbLiveData 是我们在 2017 年需要的东西。观察者模式让我们的生活更轻松,但 RxJava 等选项在当时对于初学者来说太复杂了。 架构组件团队创建了 LiveData:一个非常固执的可观察数据持有者类,专为 Android 设计。 它保持简单以使其易于上手,并且建议将 RxJava 用于更复杂的反应式流案例,利用两者
翻译
发布博客 2021.11.17 ·
51 阅读 ·
0 点赞 ·
0 评论

[译]关于 Flow 的 shareIn 和 stateIn 操作符的注意事项

原文:https://medium.com/androiddevelopers/things-to-know-about-flows-sharein-and-statein-operators-20e6ccb2bc74Flow.shareIn 和 Flow.stateIn 运算符将冷流转换为热流:它们可以将来自冷上游流的信息多播到多个收集器。 它们通常用于提高性能,在不存在收集器时添加缓冲区,甚至作为缓存机制。注意:冷流是按需创建的,并在被观察时发出数据。 热流始终处于活动状态,无论是否被观察到,都可
翻译
发布博客 2021.11.15 ·
61 阅读 ·
0 点赞 ·
0 评论

[译]从 Android UI 收集流的更安全方法

原文:https://medium.com/androiddevelopers/a-safer-way-to-collect-flows-from-android-uis-23080b1f8bda在 Android 应用程序中,Kotlin 流通常从 UI 层收集以在屏幕上显示数据更新。但是,您希望收集这些流,以确保在视图转到后台时不会做多余的工作、浪费资源(CPU 和内存)或泄漏数据。在本文中,您将了解 Lifecycle.repeatOnLifecycle, 和 Flow.flowWithLifec
翻译
发布博客 2021.11.15 ·
42 阅读 ·
0 点赞 ·
0 评论

Android 图片处理工具类 ImageUtils

import android.annotation.SuppressLintimport android.graphics.Bitmapimport android.graphics.Bitmap.CompressFormatimport android.graphics.Bitmap.CompressFormat.JPEGimport android.graphics.BitmapFactoryimport android.graphics.Matriximport android.net.U
原创
发布博客 2021.09.30 ·
18 阅读 ·
0 点赞 ·
0 评论

支持可选择编码可读取大型文本的 TextFileReader

最开始只用 RandomAccessFile 读取每一行,但发现读取太慢了,因为每次都是从磁盘里读取。然后想到了用 MappedByteBuffer 再进行一次内存映射,可以显著提升读取速度。但如果原文件太大了的话,还得进行分块映射处理,要不然会 OOM。最后又发现读取某些文本文件时会出现乱码,原因是 RandomAccessFile 是用 ISO-8859-1 编码,而 ByteBuffer.getChar() 又是用 UTF-16 编码。无奈只能用 Charset.decode(inByteBuf
原创
发布博客 2021.08.29 ·
75 阅读 ·
0 点赞 ·
0 评论

如何在 Android 进程内通过 Bundle 传递 functional interface 实例

假如我们要在 Bundle 中传递一个实现了 functional interface 的实例,我们可以这样扩展或者定义一个接口:interface Parser<E> : Parcelable where E : Enum<E>, E : LogParser<E> { fun parseLine(line: String): CharSequence}这个接口的泛型参数 E 定义的很巧妙:首先,E : Parser<E>,这是一个自限定类型
原创
发布博客 2021.08.29 ·
64 阅读 ·
0 点赞 ·
0 评论

[译] Realm 修改对象模式 - Android SDK

原文:https://docs.mongodb.com/realm/sdk/android/examples/modify-an-object-schema文章目录添加属性删除属性修改属性类型或重命名属性迁移函数以下示例演示了如何在模式中添加、删除和修改属性。首先,进行所需的模式更改。然后,创建相应的迁移函数,将数据从原始模式移动到更新后的模式。使用模式版本的领域0具有Person对象类型:class Person: RealmObject { // Realm schema version 0
翻译
发布博客 2021.07.05 ·
22 阅读 ·
0 点赞 ·
0 评论

[译] Realm 对象模型和模式 - Android SDK

原文:https://docs.mongodb.com/realm/sdk/android/fundamentals/object-models-and-schemas文章目录Realm 应用程序主键Optionality 可选择性Relationships 关系Indexes 索引Modules 模块Realm 对象RealmProxyRealm 对象限制增量构建总结一个对象模式是一个配置对象,它定义了一个 Realm 对象类型的的字段和关系。Android Realm 应用程序通过使用 Java 或
翻译
发布博客 2021.07.05 ·
53 阅读 ·
0 点赞 ·
0 评论

[译] 定义 Realm 对象模式 - Android SDK

小费有关模式的概念信息以及有关类型和约束的详细信息,请参阅基础:对象模型和模式。定义一个领域对象要在您的应用程序中定义 Realm 对象,请创建RealmObject的子类 或实现RealmModel。重要的所有 Realm 对象都必须提供一个空的构造函数。扩展RealmObject例子以下代码块显示了一个描述青蛙的 Realm 对象。这个 Frog 类可以存储在 Realm 数据库中,因为它extends是RealmObject类。科特林爪哇import io.realm.Realm
翻译
发布博客 2021.07.05 ·
29 阅读 ·
0 点赞 ·
0 评论

[译] Kotlin 协程异常处理

原文:https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/topics/exception-handling.md文章目录异常传播协程异常处理器 CoroutineExceptionHandler本节介绍异常处理和在异常时取消。我们已经知道取消的协程会在挂起点抛出 CancellationException 并且它会被协程的机制忽略。这里我们看看如果在取消过程中抛出异常或者同一个协程的多个子协程抛出异常会发生什么。异常传播协程构
翻译
发布博客 2021.06.24 ·
256 阅读 ·
0 点赞 ·
0 评论

[译] 协程中的取消和异常(第 3 部分)- 协程中的异常

原文:https://medium.com/androiddevelopers/exceptions-in-coroutines-ce8da1ec060c文章目录一个协程突然失败了!现在怎么办?????SupervisorJob 来拯救*???? 无论你使用哪种 Job,未捕获的异常都会被抛出*Job 还是 SupervisorJob?????当心测验!谁是我的父母?????了解幕后处理异常????‍????Launch*使用 launch,异常将在发生时立即抛出*Async*当 async 用作根协程时
翻译
发布博客 2021.06.17 ·
37 阅读 ·
0 点赞 ·
0 评论

[译] 协程中的取消和异常(第 2 部分)- 协程中的取消

在开发中,就像在生活中一样,我们知道避免做多余的工作很重要,因为这会浪费内存和精力。这个原则也适用于协程。您需要确保控制协程的生命周期,并在不再需要时将其取消——这就是结构化并发所代表的含义。继续阅读以了解协程取消的来龙去脉。调用取消启动多个协程时,跟踪它们或单独取消每个协程可能会很痛苦。相反,我们可以依靠取消启动协程的整个 scope,因为这将取消它所有创建的子协程:// assume we have a scope defined for this layer of the appval job
翻译
发布博客 2021.06.17 ·
52 阅读 ·
0 点赞 ·
0 评论

[译] 协程中的取消和异常(第 1 部分)- 协程:第一件事

原文:https://medium.com/androiddevelopers/coroutines-first-things-first-e6187bf3bb21本系列博客文章深入探讨了协程中的取消和异常。取消对于避免做多余的工作很重要,这会浪费内存和电量;正确的异常处理是良好用户体验的关键。作为本系列其他 3 部分(第 2 部分:取消,第 3 部分:异常,第 4 部分:不应取消的工作的协程和模式)的基础,定义一些核心协程概念非常重要,例如 CoroutineScope, Job 和 Coroutine
翻译
发布博客 2021.06.17 ·
38 阅读 ·
0 点赞 ·
0 评论

[译] Realm 的使用入门

一、初始化Realm必须先初始化 Realm 库,然后才能在应用程序中使用 Realm。您的应用程序每次运行时都应该仅初始化一次 Realm。要初始化 Realm 库,请将 Android context 提供给 Realm.init() static 函数。您可以提供一个 Activity,Fragment 或 Application context 进行初始化,而在行为上没有差异。您可以在 Application子类 的 onCreate() 方法中初始化 Realm 库,以确保每次应用程序运行时仅
翻译
发布博客 2021.06.16 ·
44 阅读 ·
0 点赞 ·
0 评论
加载更多