- 博客(112)
- 收藏
- 关注
原创 鸿蒙开发画布Canvas的核心API使用详解
完整API文档可参考鸿蒙开发者文档中心,实际开发中建议结合离屏渲染与路径复用提升性能。若多个图形共享同一路径,最后一次设置的样式会覆盖之前的所有图形。自动连接起点与终点,形成闭合路径。:两条线段颜色独立,互不影响。需为每个图形单独调用。
2025-04-19 19:40:20
446
原创 鸿蒙应用开发中的生命周期详解:UIAbility、页面与组件
鸿蒙应用的生命周期管理是一个层次化的体系,从UIAbility到页面再到组件,每个层级都有其特定的生命周期方法。理解这些生命周期及其相互关系,对于开发高性能、资源高效的鸿蒙应用至关重要。通过合理利用这些生命周期回调,开发者可以精确控制资源分配、数据加载和状态管理,从而提供流畅的用户体验。
2025-04-18 00:30:00
713
原创 鸿蒙系统开发中路由使用详解
/ 跳转时设置动画//入场动画效果type: RouteAnimation.SlideRight // 目标页从右侧滑入},//退场动画type: RouteAnimation.SlideLeft // 当前页向左滑出});//支持的动画类型://RouteAnimation.Slide:滑动效果(默认)。//RouteAnimation.Translate:平移效果。//RouteAnimation.Fade:淡入淡出效果。//RouteAnimation.None:无动画。
2025-04-17 20:30:41
416
原创 鸿蒙系统数据存储方式详解
鸿蒙系统(HarmonyOS)提供了多样化的数据存储解决方案,覆盖从轻量级配置到复杂结构化数据、从内存临时存储到持久化存储、从单设备到分布式场景的各种需求。以下是所有存储方式的系统化总结。
2025-04-17 10:33:19
973
原创 鸿蒙开发中,@Extend、@Styles 和 @Builder 的区别
装饰器作用范围参数支持适用场景定义位置@Extend特定组件扩展✔️扩展原生组件样式/事件仅全局@Styles通用样式复用❌提取公共样式全局或组件内@Builder结构与逻辑封装✔️复杂布局或动态内容复用全局或组件内通过合理使用这三种装饰器,可以显著提升鸿蒙开发的代码复用性和可读性。更多细节可参考官方文档或示例代码。
2025-04-15 23:35:23
350
原创 鸿蒙系统开发状态更新字段区别对比
在鸿蒙系统开发中,状态管理是构建响应式UI的核心机制,主要通过装饰器(Decorators)实现字段的状态观测与更新。根据鸿蒙的版本(V1稳定版和V2试用版),支持的装饰器及其特性有所不同。通过合理选择装饰器,可以高效管理鸿蒙应用的状态更新。如需更复杂的场景(如跨页面状态共享),可结合。等全局状态管理方案。
2025-04-15 22:52:48
486
原创 Mac 上解压缩 RAR 文件
RAR 在十几年前的互联网曾叱咤风云般的存在。在那时,你所能见到的压缩文件几乎都是 RAR 格式,大家在 Windows 上使用的压缩、解压缩软件基本都是 WinRAR。Mac 加压缩 RAR 工具推荐虽然这些年使用 RAR 格式的压缩包的情况在逐渐减少,但是你还是经常能在国内各种网站下载到使用 RAR 格式的压缩文件,可遗憾的是默认情况下在 Mac 上不能直接打开 RAR 文件解压缩,也没有 Mac 版 WinRAR。
2023-03-06 16:17:37
1898
转载 Java对象大小计算
结合第一章《理论篇》的知识,猜想一下,在64位虚拟机下,Java对象的大小。这是在代码中打印对象大小的方法。在 Maven 项目的。学习和掌握该知识,有助于分析。“应用系统的堆到底该设置为多大?3.1 指针压缩的 JVM 参数。3.2 借助 jol-core。本文计算的是Java对象在。2.1 Object对象大小。2.2 包含实例数据的对象。对齐填充(数组对象才有的)打印对象大小的 API 是。
2023-03-02 21:42:43
1081
原创 Java泛型全解析
无论为泛型的类型形参传入哪一种类型的实参,对于Java来说,他们依然被当成同一个类处理,在内存中也只占用一块内存空间,可以灵活的封装,并且同时有可以限定类型,泛型的接口和类更像是一种通用的模型,模型内部的类型由使用者自己限定。"用于操作具体的某个泛型类的时候,还未确定最终使用时,采用的对象类型,就用问号作为占位的含义。使用泛型接口或类的时候,虽然可以不加部分,但是推荐加上,不然还要强制类型转换等麻烦操作。可以有多个限定条件,存在多个限定条件的时候,使用&连接。使用类型通配符的类是各种该类的泛型的父类。
2023-01-17 18:54:05
552
原创 java多态的理解
多态方法调用的优先级: this.show(O(o )、super.show(O(O )、this.show )、super.show (super )、super (o ) )对象后,用该父类引用调用子类重写的方法,此时多态就出现了。多态是方法的多态,不是属性的多态(多态与属性无关)。多态的存在要有3个必要条件:继承,方法。,父类引用指向子类对象。
2022-09-16 10:31:57
130
原创 taskAffinity详解
一个Android应用程序功能通常会被拆分成多喝Activity,而各个Activity之间通过Intent进行连接,而Android系统,通过栈结构来保存整个App的Activity,栈低的元素是整个任务栈的发起者。一个合理的任务调度栈不仅是性能的保证,更是提供性能的基础。当一个App启动时,如果当前环境中不存在App的任务栈,那么系统就会创建一个任务栈。
2022-08-25 10:18:49
1457
原创 Annotation Processor
当我们依赖一些第三方的库时,可能会遇到com.android.support冲突的问题,就是因为开发者使用的compile或api依赖的com.android.support包与我们本地所依赖的com.android.support包版本不一样。RetentionPolicy.SOURCE表示修饰的注解只在源码中保留,编译后就被遗弃了,也就是class文件中就不存在了。该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下使用api依赖的库。...
2022-07-25 16:17:11
4145
原创 ImageView比例缩放
备注: adjustViewBounds只有在ImageView一边固定,一边为wrap_content的时候,设置为true,可以让ImageView的比例和原始图片一样的效果。
2022-06-11 15:01:43
601
原创 时间转换 2021-08-03T06:06:41Z
fun formatDateTime(value: String?, format: String = "yyyy-MM-dd HH:mm"): String { if (TextUtils.isEmpty(value)) return "" return try { //系统类 DateTime(value).toString(format) } catch (e: Exception) { "" }}也是好不容易找到.
2022-05-16 15:37:43
339
原创 Debug.startMethodTracing,trace文件找不到
是因为生成文件的路径不是sd卡的根目录,网上的代码大部分还是不靠谱的。生成的文件在sd卡:Android/data/packagename/files/xxx.trace参考文章:启动优化工作选择 - 白一粥 - 博客园...
2021-12-02 11:45:09
702
转载 音频开发_如何获取单词的音频mp3文件
1.gstatic oxfordhttps://ssl.gstatic.com/dictionary/static/sounds/oxford/no--_gb_1.mp3https://ssl.gstatic.com/dictionary/static/sounds/oxford/yes--_gb_1.mp32.有道词典http://dict.youdao.com/dictvoice?type=1&audio=sheilahttp://dict.youdao.com/dictvoic
2021-11-16 00:13:15
1135
原创 流式布局FlowLayout使用
原先用的是三方的流式布局,后来发现google自己也有,效果是一样的。<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" an
2021-10-19 13:37:04
1588
1
转载 Notification
最近时不时地有人问我这样或那样的通知如何实现,所以本文将根据个人经验对Notification做个总结,以供参考!什么是通知(Notification)通知是一个可以在应用程序正常的用户界面之外显示给用户的消息。通知发出时,它首先出现在状态栏的通知区域中,用户打开通知抽屉可查看通知详情。通知区域和通知抽屉都是用户可以随时查看的系统控制区域。作为安卓用户界面的重要组成部分,通知有自己的设计指南。在Android 5.0(API level 21)中引入的 Material Design 的变化是
2021-10-19 11:52:32
670
原创 BottomNavigationView底部图标和文字的显示问题
一、BottomNavigationView3个以上图标不显示文字当图标大于3个时,显示图标和当前页的文字。调用BottomNavigationView的setLabelVisibilityMode方法可以解决布局设置:<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bnv_main" app:menu="@menu/bottom_nav
2021-10-17 11:34:52
2998
3
转载 发布aar包到maven仓库
Android:发布aar包到maven仓库以及 maven插件 和 maven-publish 插件的区别在日常开发中,不可避免的需要把自己的 library 发布到 maven 仓库中,这样使用起来也更加方便。发布 aar 包到 maven 仓库,主要是使用 Gradle 提供的插件: maven 插件(旧版),在 Gradle 6.2 之后,就完全被弃用了(增加了@Deprecated注解) maven-publish 插件 maven插件,是 Gradle 1.0 的..
2021-10-12 13:40:21
2923
转载 资源id与资源名称互相转换
Android 资源名称(name)和id互相转换,动态获取一、通过传递图片名称,获取对应的图片idpublic int getId(String name){ Resources res=getResources(); //return res.getIdentifier(name,null,null);//带上地址 例如 包:type/name (org.anjoy.act:drawable/ic) return re
2021-09-12 12:08:54
461
转载 非静态内部类不能定义静态成员变量和静态方法
非静态内部类不能有静态成员!成员内部类必须先实例化外部类对象然后再实例化成员内部类;非static的内部类,在外部类加载的时候,并不会加载它,所以它里面不能有静态变量或者静态方法。1、static类型的属性和方法,在类加载的时候就会存在于内存中。2、要使用某个类的static属性或者方法,那么这个类必须要加载到jvm中。基于以上两点,可以看出,如果一个非static的内部类如果具有static的属性或者方法,那么就会出现一种情况:内部类未加载,但是却试图在内存中创建static的属性和方..
2021-09-04 10:08:52
976
原创 Handler之同步屏障机制(sync barrier)
分析中,发现不错的文章分析,暂时做个记录:https://www.cnblogs.com/wytiger/p/13031145.html
2021-06-09 10:13:51
221
1
原创 布局动画 LayoutTransition
在API 11后,添加了两个能实现在创建后添加控件仍能应用动画的方法,分别是android:animateLayoutChanges属性和LayoutTransition类。他们的API 等级必须>=11。使用方法:ViewGroup使用LayoutTransition即可为布局变化应用动画效果。ViewGroup#setLayoutTransition(LayoutTransition) android:animateLayoutChanges="true"通过...
2021-05-19 18:39:07
491
7
原创 SeekBar高度设置、自定义样式
最近在自定义SeekBar的滑块、拖动条时,发现底部的背景和滑块一样高,鼓捣了半天也没有效果,主要还是SeekBar的高度、滑块高度、拖动条高度定义未搞清楚,现在做个记录以便以后参考:1、滑块高度:可以在自定义Drawable文件中,通过<size android:height="10dp" android:width="10dp" />设置<selector xmlns:android="http://schemas.android.com/apk/r...
2021-05-14 15:14:06
3159
7
原创 Broadcast广播的分类
BroadcastReceiver(广播接收器),属于Android四大组件之一。在分析ANR产生原因时,涉及到部分广播的知识,我将针对广播类型,做个记录:1. 普通广播(Normal Broadcast)即开发者自身定义intent的广播(最常用),也就是并行广播。发送广播使用如下:Intent intent = new Intent();//对应BroadcastReceiver中intentFilter的actionintent.setAction(BROADCAST_AC...
2021-04-30 14:42:04
2650
2
转载 Android ANR 原理分析
ANR 简介ANR:Application Not Responding,即“应用程序无响应”。Android 运行时,AMS 和 WMS 会监测应用程序的响应时间,如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会上报 ANR。ANR 的触发分为以下几类, InputDispatching Timeout:输入事件(包括按键和触屏事件)在5秒内无响应,就会弹出 ANR 提示框,供用户选择继续等待程序响应或者关闭这个应用程序(也就是杀掉这个应用
2021-04-30 11:51:45
1931
1
原创 android 跳转到当前应用的详情、设置页面
分析三方权限申请源码时,发现不错的逻辑,做个记录: Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) .setData(Uri.fromParts("package", getPackageName(), null)); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);...
2021-04-28 11:03:20
2810
4
原创 自定义控件-时间轴
由于项目中有需求,就简单的封装一个,先记录一下,有时间上传到github。1、先增加自定义属性:<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="global_TimelineLayout"> <!--时间轴左偏移值--> <attr name="global_line_margin_left" for
2021-04-25 09:41:55
684
4
转载 android存储路径详解
前言前两天因为开发一个app更新的功能,我将从服务器下载的apk文件放在了内部存储目录(测试手机为小米,路径为:data/user/0/packagename/files)下面,然后安装的时候一直安装不了,提示解析包出错。后来查询发现,安装apk是调用了PackageInstaller,没有相关权限,这个无法获取内部路径,所以会安装不了。借机也复习了一遍Android下面存储相关的知识点,特来总结一番。存储分类对于Android存储目录,我总结成一张思维导图,如果有需要原图的,请在..
2021-04-20 17:53:38
16126
2
转载 toast能在子线程中弹出吗
Android人知道在安卓中不能在子线程中更新ui,为什么呢?真的不能吗?先做个试验,我们在子线程中调用toast,看看有什么效果,按照上边一句话的意思,这里应该会报错显示不能再子线程中刷新ui吧val thread = object : Thread() { override fun run() { Toast.makeText(this@MainActivity, "123", Toast.LENGTH_LONG).show() }}thread.start
2021-04-18 23:14:54
501
2
原创 获取顶部状态栏高度
//获取顶部status bar 高度private int getStatusBarHeight() { Resources resources = mActivity.getResources(); int resourceId = resources.getIdentifier("status_bar_height", "dimen","android"); int height = resources.getDimensionPixelSize(resourceId);.
2021-03-18 10:16:21
676
原创 maven设置每次构建获取最新jar包版本号
一般开发过程中,版本都是SNAPSHOT版本的。在跨工程引用的时候,获取最新版本的jar。经常就是不断的更新版本,通过版本变更来获取最新版本的jar。其实是可以声明变化版本,让gradle每次编译都去获取最新时间戳版本的jar(目前只可以解决相同分支jar问题,如果是多分支合作,代码获取会存在问题)。build.gradle中的依赖是通过设置maven依赖实现。我们知道,maven可以说是通过一个坐标定位来确定唯一一个包的,所说的坐标定位分别是groupId,artifactId和versi...
2021-03-17 11:55:08
3175
原创 小米手机电量和性能的白名单
小米手机Note 3有个“电量和性能”设置,如果没有把app设置为无限制,侧app在后台很容易被杀,导致每次重新启动app,针对该情况,做了个判断/** * 电池优化设置 */object BatteryOptimization { /** * 判断当前APP是否有加入电池优化的白名单(目前只限于小米 Note3手机) */ fun isIgnoreBatteryOptimization(activity: Activity?):...
2021-02-03 14:20:30
3471
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人