- 博客(19)
- 收藏
- 关注
原创 Android 内核之组件间通信方案
在sendBroadcast,startActivity时,我们会用到Intent。Intent可以携带一些数据,比如基本类型数据int、Boolean,或是String,或是序列化对象,Parcelable与Serializable。Intent传递数据时,如果数据太大,可能会出现异常。比如App闪退,或是Intent 发送不成功,logcat报错等等。这就牵涉到一个问题:Intent传递数据大小限制。Intent到底能够携带多少数据呢?使用Intent传送数据时,可能会出现异常。
2025-11-19 17:55:32
872
原创 Android 中 Service 内核原理
IntentService本质=Handler+HandlerThread:通过HandlerThread单独开启1个工作线程:IntentService创建1个内部Handler:ServiceHandler绑定ServiceHandler与IntentService通过onStartCommand()传递服务intent到ServiceHandler、依次插入Intent到工作队列中&逐个发送给onHandleIntent()
2025-11-19 15:14:56
938
原创 Android 的 Activity 调用栈
当一个App启动时,如果当前环境下不存在该App的任务栈,那么系统就会创建一个任务栈,此后,这个App所启动的Activity都将在这个任务栈中被管理,这个栈也被称为一个Task,即表示若干个Activity的集合,他们组成在一起形成一个Task,特别要注意的是,一个Task中的Activity可以来自不同的App,同一个App的Activity也可能不在一个Task中。
2025-11-16 17:50:00
960
原创 Android 自定义View实战
上面的这些Canvas方法固然已经很强大了,但是我们如果想要绘制一些不规则的图形怎么办,这时候就要用到强大的drawPath()方法了,通过对Path进行设置不同的坐标、添加不同图形,最后传入drawPath方法中可以绘制出复杂的且不规则的形状。Canvas除了可以绘制图形之外,还可以绘制文字,Canvas的绘制文字的方法有drawText()、drawTextOnPath()、drawTextRun()等方法,在绘制文字是和Paint的结合更为紧密,所以绘制文字的方法放在下文。
2025-11-16 17:17:36
871
原创 Android 布局 ViewGroup
布局特点适用场景线性排列,权重分配简单的单行/列列表,等分布局相对定位,灵活减少嵌套的复杂布局,元素间有关联的布局层叠堆放重叠效果,如Fragment容器、图片浮层表格形式规整的表格式数据展示GridLayout网格,灵活规整的网格状布局(如计算器、图标网格)绝对坐标已废弃,不应使用现代开发建议:对于复杂界面,优先考虑使用更强大的 ConstraintLayout(约束布局),它可以高效地实现上述大多数布局的效果,并能显著减少布局嵌套层次,提升性能。上述经典布局在简单场景中依然非常实用。
2025-11-11 11:51:02
847
原创 Android 的 ConstraintLayout 布局使用
加依赖:确保里有。定根布局:根标签用。放视图:把ButtonTextView等放进去。添约束(最关键!:为每个视图的水平方向和垂直方向至少各加一个约束。水平方向:约束Start或End。垂直方向:约束Top或Bottom。常用目标parent(父布局)或其他视图的id。打开 Android Studio 的布局编辑器,直接拖拽控件,观察它自动生成的约束代码,这是最快的学习途径!场景推荐选择理由新项目开发性能好、功能强、现代标准复杂界面减少嵌套、响应式支持好简单相对定位代码更简洁直观。
2025-11-11 11:47:18
608
原创 对比 ListView 与 RecycleView
RecyclerView 是 ListView 的升级版,提供了更大的灵活性和更好的性能,但相应的代码复杂度也更高。对于新项目,推荐使用 RecyclerView;对于现有使用 ListView 的简单项目,如果没有特殊需求,可以继续使用 ListView。
2025-11-10 19:01:42
946
原创 Android 中 View 渲染机制
优化性能一般从渲染,运算与内存,电量三个方面进行。接下来学习 Android 的渲染机制,Android系统每隔16ms就重新绘制一次Activity,也就是说,我们的应用必须在16ms内完成屏幕刷新的全部逻辑操作,即每一帧只能停留16ms。16ms意味着1000/60hz,相当于60fps。人眼对于流畅动画的感知阈值约为每秒60帧低于60fps会明显感觉到卡顿和不流畅60fps对应的帧间隔时间为16.67ms(约16ms)而如果我们的应用没有在16ms内完成屏幕刷新的全部逻辑操作,就会发生卡顿。
2025-11-10 09:44:59
897
原创 Android 触摸事件分发机制
如果该方法没有被覆写或调用了super的同名方法,则会调用 onInterceptTouchEvent 方法,如果该方法返回TRUE拦截事件,则交给自身的onTouchEvent 处理,如果该方法返回FALSE不拦截,则继续传给子子View(图中是View)的 dispatchTouchEvent方法处理。一般情况下,默认为FALSE。(1)如果经过子 View 层层传递或处理后,该事件被消费了(即返回了 TRUE),则 Activity 的分发方法也返回 TRUE,同样也表示该事件已经被消费了。
2025-11-09 16:06:52
663
原创 理解在View的onTouchEvent 方法中,如果设置了onClickListener监听对象,则会调用其onClick方法
3、回调触发:如果检测到点击且设置了 OnClickListener,则调用 onClick 方法。这种方式实现了触摸事件与业务逻辑的解耦,开发者只需关注 onClick 方法中的具体实现。1、触摸事件传递:当用户触摸屏幕时,触摸事件通过 onTouchEvent 方法处理。2、点击检测:系统检测是否为有效的点击操作(按下并抬起)
2025-11-09 16:05:08
261
原创 Java 语言高级特性
反射是 Java 提供的一种能够在运行时检查、修改甚至调用类、方法、字段等程序结构的能力。它允许我们在编译时未知具体类型的情况下,动态地操作这些类型。核心思想:在运行时,将类的各个组成部分(字段、方法、构造方法等)封装成相应的对象(FieldMethod静态代理是在编译期就确定代理关系的模式,需要为每个被代理的类手动编写代理类。// 静态代理示例// 1. 定义接口// 2. 真实主题(被代理类)@OverrideSystem.out.println("添加用户: " + username)
2025-11-08 19:28:04
905
原创 MVVM架构学习总结
MVVM(Model-View-ViewModel)是一种软件架构模式,已成为现代UI应用程序开发的主流模式之一。它通过将UI逻辑与业务逻辑分离,简化了开发过程,提高了代码的可维护性和可测试性。它将应用程序分为三个核心组件:Model(模型):数据模型层,负责业务逻辑和数据访问,与UI完全无关。View(视图):负责用户界面显示,但视图是被动的,它通过数据绑定从ViewModel获取数据并显示。ViewModel(视图模型):连接View和Model的桥梁,负责处理视图逻辑和状态管理。
2025-08-01 20:34:03
1211
原创 隐式intent启动activity,如果有多个符合的activity,会都启动吗?
首先说回答:隐式 Intent 启动 Activity 时,如果有多个符合的 Activity,并不会都启动。
2025-06-03 17:47:34
271
原创 Java 对时间的操作
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的。原文链接:https://blog.youkuaiyun.com/cheers_bin/article/details/125627130。是 Java 的一个日期格式化类,可以将日期对象格式化成字符串,也可以将字符串解析成日期对象。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。获取当前时间的时间戳(代码)2. 获取当前时间的时间戳。
2023-03-18 23:38:46
391
1
原创 简单记录下“<<”、“>>”和“>>>”的用法和区别
的结果与 r = 20 >> 2 相同;注:以下数据类型默认为byte-8位。注:以下数据类型默认为byte-8位。注:以下数据类型默认为int 32位。左移时不管正负,低位补0。
2023-03-18 11:15:28
7120
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅