- 博客(14)
- 收藏
- 关注
原创 Android的消息机制
作为开发者,提及Android的消息机制,必然绕不开Handler,Handler是Android消息机制的上层接口,很多人认为其主要作用就是更新UI,这点也没错,但这仅仅是Handler的一个特殊使用场景:有时候需要在子线程中进行耗时的I/O操作,当完成该操作后需要在UI上进行一些改变,由于Android开发规范的限制,我们并不能直接在子线程中对UI控件进行操作,这个时候便可以通过使用Handler更新UI。
2025-03-17 10:43:46
1053
原创 Android:View的滑动
使用动画去实现滑动的效果,主要操作View的translationX和translationY属性,既可以采用传统的View动画,也可以采用属性动画(采用属性动画,需要采用开源库nineoldandroid)注意:View动画时对View的影像做操作,并不能真正改变View的位置参数(包括宽/高);改变布局参数即改变LayoutParams,如想要把一个Button向右平移100px,我们可以将这个Button的LayoutParams里的。参数的值增加100px。
2025-01-22 15:19:07
553
原创 Android——View基础知识
View是Android中所用控件的基类,是一种界面层控件的一种抽象,除了View还有ViewGroup。在Android的设计中,ViewGroup继承View,及View本身可以是单个控件也可以是多个控件组成的一组控件,通过这种关系就形成了View树的结构。
2024-12-10 21:11:10
1854
原创 Jetpack基础(LifeCycle && ViewModel && LiveData)
Jetpack是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码遵循最佳做法消除样板代码减少不一致。
2024-12-09 19:05:06
989
原创 Jetpack Compose 入门与深入理解(四)
Android开发工程师都应该了解,布局文件的界面层级需要尽可能的少,因为随着层级的增加会大幅拖慢界面的加载,这种拖慢的原因主要在于各种Layout的重复绘制测量,而Compose是不怕层级嵌套的,因为其从根本上解决了这个问题,及Compose不允许重复绘制测量。LinearLayout就会先以0为强制宽度测量一下这个子View,并正常地测量剩下的其他子View,然后再用其他子View里最宽的那个宽度,二次测量这个match_parent的子View,最终得到它的尺寸,并把这个宽度作为自己最终的宽度。
2024-12-06 11:30:15
1150
原创 Jetpack Compose 入门与深入理解(三)
通过插入单个组,我们可以在 UI 中任意实现控制流,同时启用编译器对 UI 的管理,使其可以在处理 UI 时利用这种类缓存的数据结构。此数据结构是一个在连续空间中存储数据的类型,底层是数组实现,区别在于它的剩余空间,即是 Gap,Gap 具有移动到任何区域的能力,所以数据的移动、插入、删除更高效,操作数据的时间复杂度是 O(1)对 composer.start 的调用有一个 key 为 456 的分组,编译器会看到插槽表中 key 为 123 分组与之并不匹配,所以此时它知道 UI 的结构发生了改变。
2024-12-05 11:31:35
2178
原创 Jetpack Compose 入门与深入理解(二)
其可以简化并加快Android上的界面开发,使用更少的代码、配合强大的工具和直观的Kotlin API,让应用更加生动和高效。需要将应用的最低 API 级别设置为 21 或更高级别,并在应用的 build.gradle 文件中启用 Jetpack Compose,如下所示。然后,在使用了该 XML 布局的 Activity 或 Fragment 中,我们可以获取 ComposeView,并调用 setContent 方法,以向其中添加 Compose 内容。确保项目中使用的是Kotlin 1.5.31。
2024-12-05 10:44:34
641
原创 Jetpack Compose 入门与深入理解(一)
在Android开发中,我们目前采用命令式UI开发模式-- 代码经过简化 -->... ><TextView... /><ImageView... />首先,在XML中定义布局当需要更新UI时,通过View的id遍历UI树,找到对应的操作节点调用节点的相关方法进行更改这就是Android当中的命令式UI,即UI的更新都需要手动刷新,UI与数据没有映射关系。
2024-12-04 17:22:09
2040
原创 Kotlin的类(Kotlin基础入门学习)
针对定义类的属性 kotlin会自动生成field、getter、setter,field用来存储属性数据 不能直接定义field 只暴露给getter、setter使用默认都是封闭的(private)使其可以开放继承 使用open修饰。
2024-12-03 11:22:41
583
原创 Android基础:四大组件(Activity、Service、Broadcast、Content Provider)
在Activity A打开另一个Activity B(B是透明背景或者弹窗样式的Activity)再回到Activity A。正常销毁流程:用户点击返回键关闭Activity、调用Activity.finish()关闭Activity、杀死了应用。需要stopService/stopSelf +onUnbind() 全部执行完 触发销毁 onDestroy()-Android中的入口类是Manifest(注册清单)中被限定为入口的Activity。
2024-12-02 17:15:12
950
原创 Android:事件分发机制
笔者建议,读者可以先通读文章,不要过于纠结途中的相关方法的罗列,重点在于理解事件分发机制的流程即事件分发机制在Activity、ViewGroup、View三者之间的传递,对于文章图中罗列的相关方法可先了解其大致功能,一定要结合Android源码深入理解,先掌握概念,再回到代码中看具体实现逻辑事件分发中的”事件“是指什么?
2024-11-29 14:53:23
711
原创 Android中序列化方式:Serialzable接口、Parcelabel接口、Binder(二)
Binder是Android中的一个类,继承IBinder接口。从IPC角度来说:Binder是Android中的一种跨进程通信的方式,也可以理解成一种虚拟的物理设备。从Framework层来看:Binder是ServiceManager连接各种Manager(Activity、Window等)和Service的桥梁;
2024-11-26 15:09:22
742
原创 Android中序列化方式:Serialzable接口、Parcelabel接口、Binder(一)
关于手动设置serialVersionUID,是因为省去的当原类发生变化时(如增加或删除了某些成员变量,系统会重新去计算当前类的hash值并把它赋值给新的serialVersionUID,导致跟之前的不一致,进而出现反序列化失败的场景),但如果类结构发生了非常规性改变(修改类名、修改成员变量的类型)即使此时指定的serialVersionUID,还是会反序列化失败,因为类结构发生了根本性的改变,无法从老版本的数据中还原。注意:恢复后的对象newUser和user的内容完全一样,但是两者并不是同一个对象。
2024-11-26 11:29:10
385
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人