AndroidPub

其他

Android 架构 UseCase 最佳实践

如果存在,则其逻辑应该有一定的复杂度,这样才有被“封装”的价值。举一个例子,一个支付相关的业务逻辑,应该包含事务的发起和结束以及,以及事务过程中的异常处理:class
5月30日 上午 8:18
其他

迈向 Android 架构师:模块化设计原则

的业务可以形成比较稳定的领域服务。基于领域划分,要求对代码库进行垂直和水平两个方向的拆分,以弥补按业务划分方式的可复用性。领域层可以被表现层复用,领域层也起到隔离表现层和数据层的目的,进一步实现
1月22日 上午 8:18
其他

通俗易懂讲解 KISS/DRY/YANGI/SOLID 等程序设计原则

scholars}代码高度精炼,但是对于不了解业务背景的人理解成本很高,或许过不了多久作者本人也会迷糊。让我们试着换一个“老老实实”的方式来定义数据结构:data
1月11日 上午 8:18
其他

致独立开发者们:触碰这个领域要三思

是一个长线价值,越到后面越值钱,做的越久产品优势越大,用户粘性越高。但是你抱着短线的心态进来做,做了4
2023年12月28日
其他

教你如何将 App 上传 Google Play 变现

背景作为一个Android开发还是希望能上线一款自己独立的App,走下开发到上架的全流程。这个想法的引发主要是无意间在网上看到NES红白机的开源代码,萌生了要自己做个游戏机的想法,说干就干,利用业余时间把它整合到Android工程,通过JNI打通(有些开源项目还做得不错),上手魔改了一番,再加上简单的UI和基本的交互,攒出来的一个应用,不需要网络后台搭建,不管怎么样还是挺有成就感的,介绍如下❝这是一款经典的童年游戏模拟器,内含60多款经典小游戏,让你在闲暇之余玩得开心,找回童年的乐趣
2023年9月18日
其他

扒一扒 Netflix 安卓客户端使用了哪些开源库

,我都认为它是活跃的。静态的表格可能无法让大家按照自己喜爱的维度来查看名称地址类型状态说明AutoDisposehttps://uber.github.io/AutoDispose/RxJava
2023年9月14日
其他

Android 自定义 View 高仿飞书日历

作者:blackfrogjuejin.cn/post/7217425505925054521前言在笔者使用过的日历/日程类App中,飞书日程的效果和体验是比较优秀的。但又不能用飞书记录自己的私人日程,只能自己仿写一个了。飞书上的日程有四种视图:日程、日、三日、月,今天我们先首先要讲的是三日视图(其实日视图和三日视图差不多,只需要处理一下一天的宽度就行了),先上效果图:1.
2023年8月31日
其他

面试季:Android 常见内存泄露问题盘点

Tool)是一款基于Eclipse的内存分析工具,可以分析应用程序的堆内存使用情况,识别和定位内存泄漏问题。腾讯的Matrix,也是非常好的一个开源项目,推荐大家使用10.
2023年7月31日
其他

这些你都掌握了吗?Lifecycle, Coroutine, Flow 组合使用技巧

生命周期就是为了解决两类问题:解决方法也很简单,不管是Activity退出还是回到后台都会有各个阶段生命周期的回调。因此,只要监听了Activity周期,在对应的地方进行防护就可以解决上述问题。2.
2023年7月13日
其他

Compose Desktop 像素级高仿网易云桌面版应用

项目AcFun-Client-Multiplatform,里面有视频播放的功能,是基于vlcj来实现的,看了下vlcj的api,使用
2023年7月11日
其他

使用Compose开发一款桌面端APK逆向工具

Compress,依赖库及版本如下:commonMainImplementation("org.apache.commons:commons-compress:1.22")解压代码示例如下:fun
2023年6月29日
其他

Flow, StateFlow, SharedFlow 正确使用姿势,来看看你用对了吗?

冷数据流当执行订阅的时候,上游发布者才开始发射数据流。订阅者与发布者是一一对应的关系,即当存在多个订阅者时,每个新的订阅者都会重新收到完整的数据。flow
2023年6月26日
其他

大型 Android 项目架构最佳实践

layoutInflater)!!.saveAsUnChecked()setContentView(mBinding.root)BaseMvvmActivity: 继承自
2023年6月19日
自由知乎 自由微博
其他

Kotlin 协程并发问题:Mutex 我用错了吗?

这一个变量进行操作,确实没有开多线程的必要,但是实际工作中肯定不止这么一个操作啊,难道我们要因为某个变量被其他线程占用了就不继续往下走了?就这么呆呆的阻塞住原地等待?显然不现实,醒醒吧,世界不是只有
2023年6月12日
其他

有关协程 Dispatcher 的七个灵魂拷问

println("任务执行结束")}当任务执行结束后,线程继续查找任务队列的任务,若没有任务可执行则进行挂起操作,在线程池里的状态我们认为是空闲的。下面分析一下调度原理:注:此处忽略了本地队列的场景
2023年6月8日
其他

使用 ChatGPT 生成 Android 自定义圆环进度条

原文:juejin.cn/post/7224839996401958969勇敢的挑战:自定义圆环进度条我像往常一样,在网上冲浪。一则评论引起了我的注意,评论来自
2023年5月27日
其他

使用 Compose 在 iOS 上实现灵动岛效果

.clip(RoundedCornerShape(animationData.musicImageCorner)))除此之外,两者的状态管理,布局,动画等
2023年5月24日
其他

4小时4面!Android 架构岗面经分享

修饰的字节码,不瞎说。面试官便给我进行了简单的介绍,我当时就想着回来一定要自己也看一看,之前为啥没看,哎。首先在字节码中,针对Volatile修饰的变量会有一个
2023年5月22日
其他

MinSdkVersion, CompileSdkVersion, TargetSdkVersion, 这三者到底有啥区别?

targetSdkVersion当你主动去思考这些问题,你大概率也会自己设计出类似的三个属性来实现我们的需求,这样理解是不是就更容易了。回到开头,我们新建项目时,compileSdkVersion
2023年5月16日
其他

Studio Bot - 让 AI 帮我写 Android 代码

获取代码的解读。以下解读的结果,将每一行代码翻译成更能听懂的“人话”对于很多一眼看不懂的花哨代码,将会非常有用。希望尽快支持中文~一些常见问题Studio
2023年5月12日
其他

Google I/O全记录:王者归来!AI 产品全线出击,要吃掉整个行业

汇总提炼了两个景点的优劣,并且提供了几篇参考链接,如果用户有需求,可以打开参考链接阅读,而且链接文章也会根据不同的内容重点进行分类。在另外一个演示案例中,用户需要选购一辆支持通勤
2023年5月11日
其他

用 Spotless 让你的 Android 代码 “一尘不染“

可以在全工程范围内自动修复代码不合规的地方。不过它只能格式化代码,如果规则需要修改代码,比如要删除某个导入的包是需要手动操作的。从以上两步操作:配置、执行,可以看到
2023年5月6日
其他

如何使用 ChatGPT 助力 Android 开发

则不同于上面的情况,它永远不会说不知道,它总会给你一个答案。而这个答案可能是对的、也可能是错的。我们面对这个唯一的答案,如何正确地理解和辨别,就显得至关重要。运用上下文信息如果
2023年4月26日
其他

推荐一个好用的 Android 开发辅助工具

作者:小码哥哥https://juejin.cn/post/7194736298521788472闲来没事,手撸了一个辅助Android开发调试的工具App,适合Android开发者和测试同学使用。下载试用地址:githubhttps://github.com/CodeCrafts-app/CodeCrafts/raw/master/codecrafts-release-latest-version.apkgiteehttps://gitee.com/luqinx/codecrafts-docs/raw/master/codecrafts-release-latest-version.apkgoogleplay
2023年4月20日
其他

Android 沉浸式状态导航栏完美攻略

的方法调用,一般情况下,如果是日间模式,页面背景通常都是亮色,所以此时状态栏文字颜色设置为黑色比较合理,而在夜间模式下,页面背景通常都是暗色,此时状态栏文字颜色设置为白色比较合理,对应代码如下fun
2023年4月17日
其他

使用 Android Studio 模板提升编码效率

https://juejin.cn/post/7202057129803694135前言我们平常开发时,可以使用IDE提供的一些功能来实现提高开发效率,避免写重复代码的效果。而Android
2023年4月11日
其他

Kotlin 中隐藏的内存陷阱,你躲开了吗?

优雅之间找到合适的平衡。本篇定位简单,主要通过示例+相应字节码分析的方式,学完本篇,你将了解到以下内容:密封类构造函数传值的使用细节;内联函数,你应该注意的地方;伴生对象隐藏的性能问题;lazy,
2023年4月7日
其他

一个小故事讲明白进程、线程、协程的关系

忙不迭说到:"冤枉啊,我确实不是很忙,但这不怪我啊。你也知道我最近升级了频率,处理速度快了很多,进程每次给我的任务我都快速执行完了,不过它们却一直占用我,不让我处理其它进程的,我也是没办法啊。"OS
2023年4月3日
其他

扒一扒抖音是如何做线程优化的

作者:卓修武https://juejin.cn/post/7212446354920407096一、背景最近在对一些大厂App进行研究学习,在对某音App进行研究时,发现其在线程方面做了一些优化工作,并且其解决的问题也是之前我在做线上卡顿优化时遇到的,因此对其具体实现方案做了深入分析。本文是对其相关源码的研究加上个人理解的一个小结。二、问题创建线程卡顿在
2023年3月27日
其他

由浅入深了解 APK 构建流程

~/.gradle/caches/build-cache-1解释:当依赖第三方包时,第三方包首先被下载至~/.gradle/caches/modules-2这个缓存目录,然后解压到
2023年3月24日
其他

Android-MVVM-DataBinding 使用与原理

的原理没有什么黑科技,就是是基于数据绑定和观察者模式的。它通过生成代码来完成UI组件和数据对象之间的绑定,并使用观察者模式来保持UI和数据之间的同步。五、简化DataBinding的使用(封装)
2023年3月22日
其他

开源项目分享:一个支持 Activity/Fragment/Compose 的全功能路由框架

作为Android全新的UI框架异军突起,越来越多的项目正在大量使用Compose,因此支持Compose导航已经刻不容缓。@Agile("test/compose")@Composablefun
2023年3月9日
其他

打造 Android 全方向自由滚动列表

}这样做并没有紧挨着头上的Item,目前我们把Item的宽高都使用同样的大小,是勉强能看的,一旦高度不统一,就不能看了。先不管那么多,先固定大小显示出来看看效果。反正是能看了,一个寨版的
2023年3月6日
其他

面试题:Android 的 Intent 采用了什么设计模式?

等历史COPY_MODE_ALLYESYESYESCOPY_MODE_FILTERYESNONOCOPY_MODE_HISTORYYESYESNO除了
2023年3月2日
其他

安卓14抢先看,新增“应用双开”

的优化围绕着以下几方面进行:①针对不同屏幕大小、不同屏幕类型(加入折叠屏)做了相关的优化。②简化后台工作,从而达到延长设备续航的目的。③增加可定制化功能,包含显示字体大小的调整、单个
2023年2月23日
其他

Kotlin 协程能完全取代 RxJava 吗?

回调的需要。我们可以像在普通代码中那样捕获错误或设置协程异常处理程序。并且,考虑到当挂起函数完成时,协程继续按顺序执行,我们可以在下一行继续编写我们的“完成逻辑”。值得注意的是,当我们进行调用
2023年2月21日
其他

一文搞懂 Android 动态加载 so

clickTest();so库检索与删除要实现so的动态加载,那最起码是要知道本项目过程中涉及到哪些so吧!不用担心,我们gradle构建的时候,就已经提供了相应的构建过程,即构建的task【
2023年2月17日
其他

Kotlin 高阶函数与 Standard.kt 源码详解

前言在Kotlin中,高阶函数是指将一个函数作为另一个函数的参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。Kotlin为开发者提供了丰富的高阶函数,比如Standard.kt中的let、with、apply等,_Collectioins.kt中的forEach等。为了能够自如的使用这些高阶函数,我们有必要去了解这些高阶函数的使用方法今天我们来讲解高阶函数一、高阶函数详解1、高阶函数是什么?如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就称为高阶函数。与java不同的是,在Kotlin中增加了一个函数类型的概念,如果我们将这种函数添加到一个函数的参数声明或返回值声明当中,那么这就是一个高阶函数了。函数类型语法基本规则:(String,Int)
2023年2月14日
其他

十五分钟讲完个人工智能,听完了能真懂的那种

我从事人工智能相关的工作,有时候亲朋好友就问我,你那个人工智能到底是什么玩意?我一般不做解释,因为很难说清楚。后来,我碰到一个做演讲的朋友,他了解了我的困惑之后,他给我布置了一个任务:用十五分钟讲完人工智能,只有一个要求,必须让你的受众可以听懂,哪怕只讲一个1+1=2!于是,我就试着列了一个提纲,如果大家不懂的话,请给我反馈。一、什么是人工智能?人工智能,英文是Artificial
2023年2月10日
其他

终于来了!带你体验 Compose for iOS

:https://wanandroid.com/wenda/list/1/jsonDemoReqData与之前系列的实体类是一样的,这里就不重复展示了。创建接口地址类,代码如下所示。object
2023年2月7日
其他

NDK开发之 JNI 静态注册与动态注册

快速一键生成.h头文件(https://blog.csdn.net/ouyang_peng/article/details/8715602)【我的Android进阶之旅】Android调用JNI出错
2023年2月6日
其他

字节面试6连问:讲讲 ThreadLocal 与 Handler

驱动进行读写操作,当然并非简单地死循环,无消息时会休眠。但这里可能又引发了另一个问题,既然是死循环又如何去处理其他事务呢?通过创建新线程的方式。真正会卡死主线程的操作是在回调方法
2023年2月2日
其他

Android Studio Electric Eel 支持手机投屏

:https://android-developers.googleblog.com/2023/01/android-studio-electric-eel.html-
2023年2月1日
其他

探索 BottomSheet 的背后原理

的惟一距离,并将当前View移动响应距离(ViewCompat.offsetLeftAndRight)4、BottomSheetBehavior滑动4.1、嵌套滑动NestedScroll理解
2023年1月30日
其他

CameraX + MLKit 打造超简单 OCR 方案

前言疫情期间隔三差五就要做核酸,随时都要准备身份证给大白扫描识别。写一篇文章聊聊其中用到的技术吧,顺道缅怀这段难忘的经历,希望大家的生活彻底告别的疫情影响,早日回归正常!身份证扫描主要需要用到文字识别技术(OCR)。这类技术方案已经很多了,本文介绍基于
2023年1月16日
其他

17 张图更懂 RecyclerView 预加载

「预拉取(prefetch)机制」作为RecyclerView的重要特性之一,常常与缓存复用机制一起配合使用、共同协作,极大地提升了RecyclerView整体滑动的流畅度。并且,这种特性在ViewPager2中同样得以保留,对ViewPager2滑动效果的呈现也起着关键性的作用。因此,我们ViewPager2系列的第二篇,就是要来着重介绍RecyclerView的预拉取机制。01预拉取是指什么?在计算机术语中,「预拉取」指的是在已知需要某部分数据的前提下,利用系统资源闲置的空档,预先拉取这部分数据到本地,从而提高执行时的效率。具体到RecyclerView预拉取的情境则是:利用UI线程正好处于空闲状态的时机预先拉取待进入屏幕区域内的一部分列表项视图并缓存起来从而减少因视图创建或数据绑定等耗时操作所引起的卡顿。02预拉取是怎么实现的?正如把缓存复用的实际工作委托给了其内部的Recycler类一样,RecyclerView也把预拉取的实际工作委托给了一个名为GapWorker的类,其内部的工作流程,可以用以下这张思维导图来概括:接下来我们就循着这张思维导图,来一一拆解预拉取的工作流程。1.发起预拉取工作通过查找对GapWorker对象的引用,我们可以梳理出3个发起预拉取工作的时机,分别是:RecyclerView被拖动(Drag)时
2023年1月12日
其他

安卓 APP 全局黑白化实现方案

多进程变色我们可能会在APP内置小程序,小程序基本是运行在单独的进程中,但是如果我们的黑白配置在运行过程中发生变化,其他进程是无法感知的。解决方案:使用
2023年1月10日
其他

AOP 实现 Android 点击事件防抖

}});一般情况下这样处理没问题,但是业务中如果存在点击事件嵌套回调的情况。如果按照静态方法插入,会破坏原有的执行逻辑,这将是一个致命的问题。例如:事件嵌套回调,插桩后的代码如下:public
2023年1月5日
其他

为什么说 Compose 的灵感来自 React

https://developer.android.com/jetpack/compose/side-effects?hl=zh-cn#disposableeffect推荐阅读探索
2023年1月3日
其他

Kotlin 编程技巧:为函数添加作用域

体系中就是没有对布局的参数做限制,这就导致所有的参数都可以用在任意布局中,这会导致一些问题。轻则参数无效,写了一堆无用参数;严重的可能会干扰到布局的正常使用。当然,Modifier
2022年12月28日