自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 a.gray.PiggyGoldcoin.a病毒(已解决)

一、问题描述最近公司突然收到应用宝,OPPO和VIVO的应用下架通知,通知我们的俩款App疑似金融类诈骗软件,已下架。点进去查看是 平台例行扫描应用再次推送病毒结果,自动下架~当时全项目组都很蒙蔽,一个运动类App居然被查出是金融类诈骗病毒。后面不信邪有上传了一次,结果还是说是病毒软件,为了防止多次上传被拉黑名单,于是我们先打算自行测试一下。第一个,各大测试平台,VIVO用的是腾讯,安天和360扫描,于是被得到了以下结果测试了几次,发现都是腾讯手机管家测出来的,...

2020-11-19 20:01:05 81311 45

原创 ADB命令查看应用包名

一、查看当前包名1、在手机上打开app2、电脑端Crtl+R 输入cmd回车 输入命令:adb shell dumpsys window w |findstr \/ |findstr name=3、如下图,我在手机上打开了今日赚(一款赚零花钱的悬赏任务类App),查出来的包名应用名:其中 com.im.todayz为应用包名 ,fw.earntoday.ui.activity.MainActivity为当前运行的activity界面二、查看所有包名1. 依旧数据线连接手机,注...

2020-11-03 09:50:02 60002 4

原创 Kotlin协程(六)Flow流

在 Kotlin 中,Flow是一种,用于生成数据,并在不同协程之间传输数据。在协程中,如果我们要连续返回多个值,可以使用:集合 (List):一次性返回所有数据,但不能支持异步或无限数据流。回调 (Callback):可以异步获取数据,但不够优雅、易用。Flow:支持异步、序列化、流式数据处理,更适用于长时间运行的任务。

2025-03-06 15:23:52 433

原创 Kotlin协程(五)协程的取消和异常处理

在我们日常的开发时,需要对一些任务进行控制,控制好协程的生命周期,在必要的时候把任务取消掉,对于协程的异常,要进行捕获并防止其影响作用域内其他的协程。

2025-03-06 14:40:31 546

原创 Kotlin协程(四)协程CoroutineScope作用域

CoroutineScope 定义了协程的生命周期,它用于管理协程的启动、取消,并确保协程在 Scope 结束时自动取消,避免内存泄漏。如果担心自己忘了取消job,推荐使用lifecycleScope。(生命周期感知)协程作用域。结束时自动取消,避免内存泄漏。:可以手动取消所有协程。来管理协程生命周期。

2025-03-05 11:59:22 282

原创 Kotlin 协程(三)协程的常用关键字使用及其比较

在使用协程时,经常会用到suspendlaunchasyncawait为了更好地理解suspendlaunchasyncawait之间的区别,我们可以从等方面进行对比。suspendsuspendlaunchJoblaunchJobasyncawaitasyncFutureawait()asyncasync类似于launch,但它launch只是执行,不返回值。,它只是,等任务完成后再返回。launchasynclaunchasync是 Kotlin 协程中的一个函数,它。

2025-03-04 15:21:46 942

原创 Kotlin协程(二)协程的生命周期及管理

在 Kotlin 中,协程的生命周期 主要涉及 创建(Starting)、执行(Active)、挂起(Suspended)、取消(Cancelled) 和 完成(Completed) 这些状态。协程的生命周期受 CoroutineScope 和 Job 控制。

2025-03-03 14:41:22 523

原创 Bug记录 aab打包失败,apk打包成功

问题记录:项目正常运行,build没问题,apk可以正常打包,但是aab打包死活不行,报错。

2025-02-27 16:59:59 397

原创 MPAndroidChart 图表库使用详解

因为最新款App需要做健康类的应用,于是对比了几个三方库后,还是选择star最高的MPAndroidChart来实现项目的需求。但是网上看的要么版本太老,要么就是需要VIP,或者不能满足自己的需求,所以这里自己进行一下总结下几个图表的使用及其常用方法。⚡ 一个功能强大且易于使用的 Android 图表库 ⚡。3.4 雷达图 RaderChart。我就去下载的aar自己本地依赖的。3.2 柱状图 BarChart。3.3 饼图 PieChart。这是github的三方库地址。去阿里云仓库下载的3.0.0。

2025-02-24 11:58:17 828

原创 MPAndroidChart——饼图PieChart详细使用

第二个例子 主要是多进行一些配置,具体的api有啥作用请看著书。,用于可视化数据占比。它可以展示多个类别的数据,并以。是 MPAndroidChart 提供的一种。方式直观呈现各部分比例。

2025-02-24 11:56:00 405

原创 MPAndroidChart——柱状图BarChart详细使用

关键点:因为自带的堆叠柱状图会加你的第一个值,如果不减去第一个值,就会绘制2到(2+8)的区间,也就是2-10都会绘制,这肯定不符合需求设计,所以记得减去上一段的Y值。实现柱状图,能够良好的反应用户某一段时间的各类数据,或者用于展示各个季度的各种财务相关的数据。这次主要是app内需要实现三种柱状图,圆角柱状图,区间柱状图·,多组柱状图。具体的API调用和注释都在代码里了,我就不补充了。需求是需要展示当天的温度区间,用户的血压区间。取消X,Y轴的展示,增加虚线,增加圆角。灵感来自于堆叠柱状图的实现。

2025-02-21 18:13:27 303

原创 MPAndroidChart——折线图LineChart详细使用

代码补充:上面的代码注释很完整,主要是新增了填充渐变色,Y轴设置的虚线,不展示点,x,y轴不展示等等。实现分数,心跳的折线图,本文主要介绍三方库里折线图的基础实现,详细的API作用和一些扩展。库版本不同可能会导致前缀不同,输入LineChart肯定会有提示的。主要用于存储和管理数据点,它是所有数据集(如。4. 折线图-渐变色填充。2.4.4 空数据处理。构造函数:我加了注释。

2025-02-21 15:09:27 373

原创 Android 常用设计模式和实例

设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

2025-02-10 18:50:48 1165

原创 Android FCM推送及通知栏展示

实现FIrebase Cloud Message推送功能,用户收到通知后,可以悬浮通知,自定义的大/小通知展示在通知栏,判断前台/后台,点击后进行跳转。

2025-02-06 10:01:37 1349

原创 Android性能优化系列——卡顿优化

就是。我们知道手机的屏幕画面是按照一定频率来刷新的,理论上讲,24 帧的画面更新就能让人眼感觉是连贯的。但是实际上,这个只是针对普通的视频而言。对于一些来说,比如游戏,起码需要 60 帧,30 帧的游戏会让人感觉不适;如果实现不卡顿,则需要在 16ms 内做完所有的操作才不会造成卡顿。

2025-02-05 14:18:35 725

原创 Android 谷歌支付对接流程

需求:最新的项目需要对接谷歌的订阅功能,很久没对谷歌支付了,最开始还是绕了点弯路,在此进行一点小小的总结。2.1 在BaseApp里进行初始化的调用,BaseApp记得在manifest进行引用。在应用设置中,启用 Google Play 结算。依赖库:app的build.gradle下。,创建或选择一个现有的应用。上面的代码进行了注释。

2025-01-17 12:19:44 901

原创 Viewpager2 页面切换无动画,不经过中间页面

需求:使用viewpager+tablayout来实现各种分类视频及其切换,但是当我从第一个tab点击第9个tab时,中间会一下子跳7个页面,这样闪烁的过程其实很难受。于是要求不要有过度的动画。* @param smoothScroll 为 True 表示平滑滚动到新item,为 false 表示立即滚动到新item。* @param item 要选择的项目索引。需求:viewpager2禁止左右滑动。

2025-01-15 12:32:39 279

原创 Android 毛玻璃 高斯模糊 五种方法,赶紧用

需求:Android实现模糊真的很烦,每次UI画出来就觉得真的很烦。一般不会做,每次做就觉得有点烦,有时候是模糊图片,有时候是模糊有个背景。因为遇到模糊的需求的时候比较少,所以也没总结。这次遇到了,还让我走了好些绕路。这次进行个小小总结。总结了用到的五种实现方式。

2025-01-10 10:41:59 1836

原创 Android 判断RecyclerView是否滚动到底部

tips:recyclerView.scrollState == RecyclerView.SCROLL_STATE_IDLE 这个判断条件很重要哦。需求:列表滚动后,判断是否滚动到底部,展示加载更多的Loading文案和动画。

2025-01-09 18:34:36 414

原创 Android切换语言不退出App

中设置语言是为了在运行时动态更新语言,尤其是当用户切换语言后,某些界面可能需要重新加载来反映新的语言设置。2.initData里面就是数据赋值渲染UI,如果调用Activity的recreate方法会闪退,别调用。2.所有的基类进行设置,记得application在manifest应用。1.既然只刷新当前UI,就得生成新的context。

2025-01-09 18:16:08 655

原创 Serializable,Parcelable和data class的区别

序列化是将对象的状态(属性数据)转换为字节流或其他可存储或传输的格式的过程。主要作用存储:将对象保存到文件或数据库中。传输:在网络中传输对象,比如在客户端与服务器之间传递数据。缓存:将对象转化为可恢复的格式,便于后续恢复使用。序列化后7. 什么是反序列化(Deserialization)?反序列化是将序列化后的字节流(或存储格式)重新转换回原始对象的过程。主要作用从存储或传输的格式中重建对象。恢复数据到应用中,便于程序继续使用。8.序列化与反序列化的用途网络传输。

2024-11-19 11:46:29 991

原创 SparseArray 和 HashMap 的区别

和 HashMap是 Android 中两种不同的数据结构,用于存储键值对。它们的主要区别体现在数据结构的实现、性能优化和适用场景上。

2024-11-19 10:10:09 788

原创 RecyclerView详解——(四)缓存复用机制

如果和RecyclerView上的position或者itemId匹配上了,那么认为是干净的ViewHolder,是可以直接拿出来使用的,无需调用onBindViewHolder方法。具体而言,当一个列表项被移出屏幕后,RecyclerView并不会销毁其视图,而是会缓存起来,以提供给新进入屏幕的列表项重用,这种重用不但可以避免重复创建不必要的视图,还可以避免重复执行昂贵的findViewById从而达到的改善性能、提升应用响应能力、降低功耗的效果。从上述代码可以看出,缓存复用的对象是。

2024-11-18 23:09:44 1542

原创 RecyclerView详解——(三)ItemTouchHelper.Callback拖动和侧滑

是中用于处理手势操作的回调类,通常用于实现项目的拖动(Drag)和滑动删除(Swipe)功能。通过扩展类,你可以自定义手势响应方式以及如何在项目中表现这些手势。

2024-11-15 14:23:29 461

原创 RecyclerView详解——(二)优劣,ItemDecoration,SnapHelper

本文主要讲述RecyclerView和ListView的区别,ItemDecoration实现分割线,边距和背景,以及SnapHelper的使用。

2024-11-12 18:29:02 859

原创 RecyclerView详解——(一)基本使用

官方注释:RecyclerView 可以让您轻松高效地显示大量数据。您提供数据并定义每个列表项的外观,而 RecyclerView 库会根据需要动态创建元素。顾名思义,RecyclerView 会回收这些单个的元素。当列表项滚动出屏幕时,RecyclerView 不会销毁其视图。相反,RecyclerView 会对屏幕上滚动的新列表项重用该视图。RecyclerView 可提升性能和应用的响应速度,并降低功耗。

2024-11-12 16:57:15 1647

原创 Kotlin 协程(一)协程的定义及基础使用

Kotlin 协程是一种轻量级的并发编程方式,用于简化异步代码的编写。它允许你编写看似同步的代码来处理异步任务,使代码更加简洁、可读且易于维护。协程广泛应用于 Android 开发中,用于网络请求、数据库操作等需要异步执行的任务。协程是一种语法糖 协程的出现是来解决异步问题的,但它本身却不提供异步的能力,协程某种意义上更像是一种语法糖,它为我们隐藏了异步调用和回调的细节,让我们更关注于业务逻辑的实现。一句话概括,协程是一种轻量级的方便操作异步代码的语法糖,而它本身不提供异步能力。

2024-11-05 16:40:36 1169

原创 Kotlin by lazy和lateinit的使用及区别

使用lateinit:适用于那些需要稍后赋值且会被多次修改的对象属性,比如 Android 中的Context或View。使用by lazy:适用于那些不需要立即初始化,且一旦初始化后不再改变的只读属性,比如计算密集型或一次性加载的属性。一般来说的话,lateinit一定要记得初始化,不然后面会爆异常UninitializedPropertyAccessException。

2024-11-04 17:57:04 858

原创 Android View事件分发

什么是View事件分发?将点击事件(MotionEvent)传递到某个具体的View或者ViewGroup处理的过程。事件分发是向下传递的,也就是父到子的顺序,当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件)。Touch事件相关细节(发生触摸的位置、时间、历史记录、手势动作等)被封装成MotionEvent对象。

2024-11-04 14:38:01 1340

原创 Retrofit网络请求二次封装

(之前用过Any,但是后端返回的数据格式有时候会不一样,有可能是Boolean,String,或者就是个列表,并不是一个json,所以后面我换成了JsonElement)App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。网络请求在App开发中是不可避免的开发功能点,Android自带的ottp用于网络请求,于是便衍生了各种便捷的网络请求三方库。retrofit的网络请求的工作本质上是。

2024-10-24 18:30:15 669

原创 Andorid 应用更新(升级)

如果使用 Google Play 提供的应用内更新 API,你通常不需要任何额外权限。如果你的 APK 文件下载到了外部存储(如 SD 卡或公共下载文件夹),你需要这个权限(Android 10 及以上通常不需要使用外部存储权限,使用。: 如果用户通过浏览器或自定义下载器安装应用,Android 8.0(API 级别 26)及以上需要明确授予安装 APK 的权限。如果你使用 Google Play 应用内更新 API,它处理了所有更新流程,开发者不需要操心文件读写和安装权限。1.请求接口,是否需要更新。

2024-10-24 10:46:31 474

原创 Android LiveData 数据倒灌

另一方面,LiveData 本身被设计为粘性事件,也即,一旦 LiveData 持有数据,那么在观察者订阅该 LiveData 时,会被推送最后一次数据。一方面,用于通信的 LiveData 是被托管在 Activity / Application 级作用域 SharedViewModel 中,于是。相关类型的文章很多,这里只做个人总结和其余的方法推荐。(假设通信双方是 Fragment)

2024-09-24 10:52:40 743

原创 Android 点击其他组件让输入框失去焦点

在用户填写基本信息的界面里,在输入框唤起键盘后,有时候又会弹起选择框(PickerViewDialog),如果用户在没有关闭键盘的情况下,点击PickerView,此时的焦点仍然在上个输入框,此时。之前想的是,在点击选择框时,让输入框失去焦点,但是有多个选择框和输入框的情况下,这样代码就太冗余了。于是就想到了,在dispatchTouchEvent里进行事件处理。4.这样就实现了点击屏幕上就失去焦点的功能。

2024-09-24 09:57:03 448

原创 RadioGroup和Viewpager中onCheckedChanged和onPageSelected 循环调用多次问题

其实在写这个代码的时候我就想过,再选中某个页面的时候,去设置对应的radiobutton的状态的时候,回调了onCheckedChanged,又在这里面设置viewpager的currentItem,设置了currentItem就会回调onPageSelected,岂不是无限循环。但是现在因为切换指定页面的时候,需要请求接口来刷新页面,然后今天在自测的时候,发现同一个接口会疯狂请求好几个!看那三个方法里面的代码,在满足条件的情况下,会有三次onCheckedChanged的回调,所有是这儿出了问题。

2024-09-20 20:31:35 520

原创 Android 通过相机和系统相册获取图片,压缩,结果回调

在常规的App开发中,很多时候需要用户上传图片来进行一些业务上的实现,例如用户反馈,图片凭证等。我的Retrofit请求自己又封了一下,这儿就不粘贴。传文件和普通接口会有些不同,注意一下就好了。流程请看代码注释,其中的fileprovider,需要自己在manifest中声明。我使用的是EasyPermission框架,也可以自己写。你允许分享的文件路径。相关权限回调处理,可以去看我的另一篇博客。指的是一个 XML 文件,你需要在。标签,并定义了可共享的目录。目录下创建这个文件,告诉。

2024-09-14 09:52:48 432

原创 EditText输入框单独设置hint字体大小

这次的需求,因为输入的手机号很大,但是提示文案大了后不好看,所以需要对hint字体单独设置。但是在sml中,是无法去设置hint字体大小的,那么就从代码入手。一般都只会对hint提示做颜色上的设置,而他的字体大小是随着输入内容大小一致的。平时我们在开发时经常会用到输入框,用户登录,验证码,反馈,文本输入等等。2.实现思路 SpannableString。

2024-09-12 17:36:48 364

原创 获取App应用列表,不需要权限

但是获取应用安装列表的权限现在属于敏感权限,即QUERY_ALL_PACKAGES权限。业务需要获取用户的已安装的应用列表进行上传。2.实现代码 AppUtils.kt。1.Manifest文件里进行配置。这样就是获取了安装列表的数据。

2024-09-11 14:36:45 647

原创 Android 获取设备相关信息

在做某些项目时,需要上传必要的设备信息给服务器用于风控在此做一下总结。主要抓取设备id操作系统版本,设备型号,IMSI,路由器,mac地址,设备mac地址,安卓id,经度,纬度,ip地址....

2024-08-29 16:42:08 629

原创 AndroidX 库和旧的 Android 支持库 (android.support) 之间的冲突 in multiple modules and/or libraries.....

我们平时使用一些三方库,一般都是直接在build.gradle直接引用,然后自己调用人家的API就行了,但仔细想想,我们还可以使用AAR依赖和module依赖。这是我常用的一个方法,因为之前Glide有个版本的库比较老,但是里面有个图片处理的功能,我经常用到,就会使用下面的方法把support库给干掉。我们在做日常的项目开发时经常会需要对接三方SDK或者使用一些三方依赖库已完成项目的需求,但是有时候会在拉入依赖库后报错库文件冲突。如果不能完全迁移到 AndroidX 或者你的项目中有第三方库依赖旧的。

2024-08-29 10:12:20 808

原创 Android 获取通话记录

在某些App的开发者,获取通话记录有时候是必要的(现在都要申请相对于权限哦,App上架得说明为啥获取此权限)。因为工作风控数据收集经常会用到,在此做个总结。

2024-08-28 19:02:27 952

空空如也

空空如也

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

TA关注的人

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