自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

折翅鵬的博客

虽已折断翅膀,依然渴望飞翔。

  • 博客(58)
  • 收藏
  • 关注

原创 Java进程同步

场景进程A写文件,进程B读文件,进程B需要进程A写完才能读。方案java.nio.channels.FileLock 文件锁FileLock 是进程文件锁,用于进程间并发,控制不同程序(JVM)对同一文件的并发访问。每次通过FileChannel类的lock或tryLock方法获取文件锁时,都会创建一个文件锁对象。文件锁是当前程序所属的JVM实例持有的,一旦获取到文件锁(对文件加锁),要调用release(),或者关闭对应的FileChannel对象,或者当前JVM退出,才会释放这个锁。一旦某个进

2020-05-24 17:05:57 847

原创 从源码角度理解Handler消息机制

Handler是Android中的核心机制。通过Handler可以将Message发送到Handler所在线程对应的MessageQueue中。每一个Handler实例都只会属于唯一一个线程,也只会对应唯一一个MessageQueue。源码解析使用Handler第一步都要实例化,来看看Handler的构造函数://默认构造函数,将会使用当前线程对应的Looper,如果当前线程没有Looper则会抛出异常public Handler() { this(null, false);}//传入

2020-05-17 23:42:15 334 1

原创 自定义人脸识别扫描控件实践

最近项目中在相册选择照片以后会首先进行人脸识别,在人脸识别过程中,为了提升用户体验,需要做一个弹窗,效果如下:于是基于ImageView实现了自定义控件,自定义控件的核心点就是绘制扫描效果和噪点。绘制扫描效果的实现方式就是,绘制一个渐变的矩形,然后让矩形移动起来,这里因为用到了,所以采用画布平移的方式来实现扫描区域上下移动,还可以采用偏移量的方式。上下移动的距离计算这边采用的是动画实现,因为要设置,实现先快后慢的效果,选择了,最后再根据动画值进行重绘。

2025-03-25 09:51:53 449

原创 Flutter运行错误:UG! exception in phase ‘semantic analysis‘

最近在Mac Mini M4上通过Android Studio导入Flutter项目并运行,结果一直跑不起来,错误日志如下:执行命令查看版本信息:通过输出信息**Java version OpenJDK Runtime Environment (build 21.0.4±12422083-b607.1)**可以知道是JDK版本不兼容问题,Flutter构建的时候默认使用了Android Studio内置的OpenJDK,最后总结了两种解决方案。通过直接修改android目录下gradle.propert

2025-03-20 14:21:41 388

原创 二维码活码-裂变营销神器

选择静态码还是活码,主要取决于需求。如果需要灵活性和后续更新,活码是更好的选择;如果只是需要传递固定信息,静态码则更为简单方便。

2025-03-20 11:00:08 349

原创 Firebase崩溃:ViewBinding not init!!

最近新版本上线以后,firebase上出现了比较多的崩溃,崩溃日志如下:页面结构是Activity中添加Fragment,Activity和Fragment都使用了ViewBinding。复现步骤是在切换系统语言以后,再回到界面调用一个方法,方法中使用了ViewBinding对象。因为切换系统语言以后,Fragment走了onDestroy和onDestroyView方法,Fragment被销毁了。Activity中是持有对应的Fragment实例的,这会出现问题。

2025-03-19 20:40:09 151

原创 基于Kotlin中Flow扩展重试方法

最近项目中统一采用Kotlin的Flow来重构了网络请求相关代码。Flow提供了和。

2025-02-10 15:14:36 743

原创 Kotlin实战经验:将接口回调转换成suspend挂起函数

在 Kotlin 协程中,和是用于将回调或基于 future 的异步操作转换成挂起函数。

2025-02-10 11:56:04 664

原创 ViewPager2拦截父视图的点击事件问题排查

通过跟踪,发现是ViewPager2的子视图RecyclerView拦截了事件。ViewPager2本身是ViewGroup,首个子视图是RecyclerView,于是想到了RecyclerView的事件监听。现在要实现点击Banner执行不同的动作,于是添加了点击事件,然后在点击事件执行的时候,动态获取当前页面对应的数据,再进行处理,结果发现点击事件不生效,于是做了一番排查。最近做项目,实现横向无限视频轮播的Banner,实现方案采用的是。

2025-01-17 09:27:45 206

原创 Flutter踩坑记-第三方SDK不兼容Gradle 8.0,需适配namespace

最近需要集成Flutter作为Module,Flutter依赖了第三方库,Gradle版本是8.0。

2025-01-03 17:22:40 996

原创 WebView缓存之锅

页面, H5页面需要登录,APP需要把登录态带过去,但是在APP端切换账号以后,还是加载的原来的H5页面,于是做了一下排查。但是还是不起作用,然后继续排查。最后发现是Cookie在切换登录账号的时候没有清掉,导致Cookie被复用了。最近做项目,需要通过。

2024-12-27 09:26:53 249

原创 Kotlin reified改造JSON解析

当调用具有reified的内联(inline)函数时,编译器必须能够知道作为类型参数传递的实际类型,以便可以修改生成的字节码以直接使用相应的类。如果使用reified T创建内联(inline)函数,则就算在运行时也可以访问 T 的类型,因此不需要另外传递 Class。在myGenericFun泛型函数体内,无法访问类型T,因为T只有在编译时可用,但在运行时就被擦除了,也就是泛型擦除,。因此,如果想在函数体中使用泛型类型作为普通类型使用,就需要显式将该类作为参数传递,如myGenericFun中所示。

2024-09-08 11:39:54 578

原创 Google Play结算防掉单方案

但是,如果缺少这一步,或者这一步失败,就会出现掉单,权益不到账问题,因此需要想办法解决。我们公司的产品主要是出海产品,使用的是Google Play支付,但是在上线以后,经常有客诉,说支付以后,权益没有到账,于是对整个Google支付体系做了研究了一下。这里有个步骤,就是在支付完了以后,Google服务会回调通知到服务端,因此只要在接收到的通知数据里面,能拿到用户ID就能进行绑定和权益发放。通过设置用户ID到这两个字段中的其中一个里面,可以在服务端收到通知的时候拿到,进行绑定,从而防止掉单情况发生。

2024-09-08 01:28:23 1379

原创 自定义控件实现类似于抖音加载动画效果

最近做AI项目,设计师想实现类似于抖音那种加载动画效果,但是不是两个圆球交叉,而是两个三角形,其实可以用lottie动画的,但是我本人比较喜欢自定义控件,因此就自定义控件实现了。思考:采用Xfermode可以实现吗。

2024-09-07 23:32:23 305

原创 自定义TextView实现结尾加载动画

最近做项目,仿豆包和机器人对话的时候,机器人返回数据是流式返回的,需要在文本结尾添加加载动画,于是自己实现了自定义TextView控件。其中BallLoadingDrawable是自定义Drawable,也可以换成其他自定义的Drawable实现不一样的动画效果。注意:使用该控件必须设置。

2024-09-07 22:54:13 420

原创 Android流式接口请求实践

最近做项目,接入,接口是流式返回的,于是对流式接口请求做了下总结。项目中采用的实现网络请求、因为后面的标识可能会被GPT拆成两个,因此需要拼装后进行解析。

2024-09-07 12:45:56 1432 2

原创 Flutter Dio网络请求报错FormatException: Unexpected character

经过排查,发现是因为Dio默认是以JSON格式来接受数据的,因此需要更改响应数据类型。

2024-07-27 14:23:34 521

原创 基于NDK验签的方式实现APP重签名校验方案

最近发现有人破解我们的应用,于是研究了一下如何在应用被破解以后,让应用退出的简单实现方案。

2023-12-04 16:21:29 526

原创 Android设置文字颜色渐变

项目中用到了很多文字颜色渐变的设计,因此做一下记录。属性颜色值,否则不会产生预期效果。

2023-11-29 11:35:57 1393

原创 Android网络安全配置network_security_config

Android开发过程中,如果出现网络请求错误,测试经常会抓包来查看请求的情况。在Android6.0 及以下系统可以抓包,而 Android7.0 及以上系统不能再抓包了,因为Android7.0及以上系统版本新增了证书验证,所以 app 内不再像原来一样默认信任用户的证书了。为了让测试能在抓包,一般都会在AndroidManifest.xml文件中配置network-security-config来实现。

2023-07-01 22:52:53 4705

原创 Android TextView自定义长按菜单

这样虽然能让TextView支持长按唤起系统菜单栏,但是如果需要定制菜单栏,该怎么做呢?在项目开发中,经常需要对TextView长按操作进行处理,弹出相应的菜单栏。只需要实现ActionMode.Callback重写其方法即可自定义菜单。要想让TextView支持长按弹出菜单栏,需要将。可以对选择的文本高亮的颜色进行更改。在styles.xml的主题中修改。可以对选择器手柄的颜色进行更改。如何自定义选择器样式呢?在TextVIew中添加。

2023-05-29 17:09:30 2468

原创 判断点在任意矩形内

Path反旋转向量乘积

2023-05-13 14:10:06 745

原创 基于顶部对齐进行裁剪的ImageView

最近项目中需要基于顶部对齐,然后对图片进行缩放裁剪的效果,于是就研究了一下,整理代码如下。

2023-04-20 09:54:04 619

原创 Android媒体库不刷新问题追溯和解决

最近项目中需要通过ContentProvider获取某种类型的文件列表进行展示,然后在展示列表中可以对文件进行复制,移动和删除操作。在开发过程中,对文件操作以后,再次拉取列表,发现还是原来的旧数据,数据并没有刷新,于是做了一下追溯和解决。查询文件ContentProvider private List<File> findFile(Context context, List<String> extensions) { String[] mineTypes

2022-05-14 20:02:57 1309

原创 组件化:合并清单文件

最近做项目,在集成第三方aar以后,本来请求读写权限允许以后应该是权限授予成功了,但是结果却是读权限授予成功了,但是写权限未授权。主项目清单文件权限声明如下:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />然后通过Andr

2022-05-01 21:42:19 767

原创 Navigation重建Fragment问题分析及解决

最近项目中使用到了BottomNavigationView结合Navigation实现底部导航栏切换页面业务。NavigationUI.setupWithNavController(bottomNavigationView, navController);结果发现每次点击底部导航栏切换的时候都会重建Fragment,于是分析了源码,并研究了解决方案。源码分析setupWithNavControllerNavigation源码分析解决方案自定义Navigator...

2022-05-01 18:35:16 3776 15

原创 完整Activity和Fragment生命周期

参考:https://github.com/xxv/android-lifecycle

2022-04-23 22:53:34 339

原创 EditText选中全部无效问题排查

最近项目有需求,EditText第一次获取焦点以后弹出软键盘并且选中所有文本,于是想到将android:selectAllOnFocus设置为true就能实现。<androidx.appcompat.widget.AppCompatEditText android:layout_width="match_parent" android:layout_height="50dp" android:maxLines="1" android:s

2022-04-17 22:57:21 2659

原创 Intent.ACTION_VIEW无法跳转问题排查

项目中文本链接(包括网址和邮箱)点击以后使用的是Intent.ACTION_VIEW打开,但是有用户反馈在三星Galaxy Tab S7上点击以后无法跳转,于是做了问题的排查,最后确定为Android 11以上软件包可见性未设置。链接点击跳转代码如下: public static void openBrowser(Context context, String url) { final Intent intent = new Intent(Intent.ACTION_VIEW, U

2022-04-09 14:48:08 6101 2

原创 Android底部弹窗实现方案

项目中经常会遇到底部弹窗,今天就来把底部弹窗实现方案总结一下。BottomSheetDialog自定义DialogWindowManager

2022-03-20 12:22:26 8784 1

原创 顺序显示多个弹窗方案-责任链模式

在应用中,用户进入应用首页以后经常会遇到顺序弹出多个弹窗的业务。例如进入首页以后,首先弹出运营活动弹窗,然后弹出应用评分或反馈弹窗,最后弹出应用更新弹窗等等。于是想到封装一套代码可以控制弹窗流程执行。DialogChainOwner弹窗链持有者。负责弹窗链节点的加入和展示入口。/** * 弹窗链拥有者,用于控制链节点的添加和展示以及取消,销毁 */public class DialogChainOwner implements LifecycleEventObserver { priv

2022-03-19 22:20:00 1500 1

原创 Java Comparable与Comparator的区别

Java 提供了两个接口来使用类的数据成员对对象进行排序:Comparable和Comparator。Comparable一个Comparable对象能够将自己与另一个对象进行比较。类本身必须实现java.lang.Comparable接口来比较它的实例。考虑一个Movie类,它的成员喜欢、评级、名称、年份。假设希望根据发行年份对电影列表进行排序。可以用Movie类实现Comparable接口,重写Comparable接口的compareTo()方法。 class Movie implemen

2022-01-16 14:22:36 1583

原创 Google Play结算服务开发

Google Play结算平台开发指导

2022-01-09 22:57:50 4221 2

原创 Android截图方式

Android中实现截图的方案集锦

2021-12-26 22:31:28 3683 1

原创 顺序显示多个弹窗方案-RxJava

项目中经常会遇到依次显示多个弹窗的情况,例如进入首页以后先弹出更新提示弹窗,关闭以后再弹出运营弹窗,然后弹出其他业务弹窗等等。常见的做法是嵌套调用:dialogA.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { //trigger B

2021-12-19 12:44:20 1538

原创 色度抠图之取色

最近做音视频项目中的色度抠图功能,用吸管进行当前帧取色,然后进行强度和阴影调节进行取色,具体效果可查看剪映的色度抠图功能。这篇文章就讲述了如何对视频当前帧的某个位置进行取色。首先需要获取视频对应的当前帧: /** * 获取当前帧对应的Bitmap * * @param clip 媒体片段对象 * @param position 当前位置 * @return */ private Bitmap getCurrentBitmap

2021-12-19 12:22:34 920

原创 android PendingIntent理解

public static void startActivityForService(Context context, MediaInfo mediaInfo) {Intent intent = new Intent(context, ScreenshotResultActivity.class);intent.putExtra(EXTRA_MEDIA_INFO, mediaInfo);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.add

2021-10-31 23:27:31 11405 1

原创 android绘图之Canvas和Bitmap结合

Rect和RectFMatrixCanvasBitmap

2021-10-31 12:11:01 5002

原创 Android离散选择控件

最近做项目中需要用到拖动条,并且拖动条只能在某些值之间,于是找了点资料。SeekBarSeekBar通过设置Widget.AppCompat.SeekBar.Discrete主题可以实现离散值选择。 <androidx.appcompat.widget.AppCompatSeekBar android:id="@+id/seekBar" style="@style/Widget.AppCompat.SeekBar.Discrete" andr

2021-10-23 12:45:14 1424 1

原创 Java枚举结合位运算实现多配置

项目中经常会碰到配置参数,根据参数配置不同作出不同的处理,枚举可以对参数的取值进行限制,也能清晰的知道应该传哪些参数,如果参数支持多个枚举值,通常可以采用数组或者可变长度参数,但是这样传参每次都需要进行遍历,然后进行对比来判断究竟传入了那些枚举值,不优雅。枚举序数每个枚举类都会有一个ordinal属性,这个属性代表着当前枚举值在枚举类中的序号。public enum Gravity { LEFT, //ordinal=0 TOP,

2021-07-10 11:53:57 992

空空如也

空空如也

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

TA关注的人

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