自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android应用进程启动过程(二)

当捕获到MethodAndArgsCaller异常时,会调用到caller的run方法,回到之前MethodAndArgsCaller的代码可以知道,其run方法会通过反射调用到main方法。1处调用native的方法,使用JNI方式,创建Binder线程池,这里的过程不是重点,我们只需要知道binder线程池在这时被创建即可。它的创建也是在应用进程创建时做的,因此我不得不多提一嘴。介绍了AMS向Zygote的Socket请求应用进程的过程,我们接着看Zygote接收到请求后是如何处理并创建进程的。

2025-08-10 19:28:37 905

原创 Android应用进程启动过程(一)

要想启动一个应用程序,首先要保证其进程已启动。AMS在启动应用时会检查这个应用进程是否存在,如果不存在就会向Zygote进程请求启动所需要的应用进程。我们知道,Zygote进程之所以可以能创建应用进程,是因为其创建时会创建一个Server端的Socket,用于等待AMS请求Zygote创建新的进程。Zygote进程通过fork自身来创建应用进程(可以想象成细胞分裂),这样新进程就能获得Zygote在启动时创建的虚拟机实例(Runtime实例)。除此之外,还创建了Binder线程池和消息循环。

2025-08-10 16:24:58 1086

原创 kotlin协程常见四个错误

Kotlin 协程(Coroutines)是 Kotlin 语言中的一种轻量级并发编程工具,旨在简化异步编程和并发任务的处理。正确使用协程能够帮助我们更优雅和快速的实现线程切换和处理并发问题。然后,如果使用不恰当,就会降低任务处理效率,获取引发非预期的问题。本篇文章将会通过一些隐藏在代码里的危险案例,找出这些隐蔽的错误。在直接给出结论之前,希望读者先试着先思考一下问题所在,并尝试解决。

2024-08-18 22:18:53 1225

原创 AMS进程管理--ADJ篇

上一篇文章将基于Android 12的AMS进程管理中LRU算法进行了分析,得到的结论是根据进程状态(是否存在activity和service)去调整mLruProcessServiceStart和mLruProcessActivityStart两个指针的位置,维护活动的列表中3个区域里各自进程排序。答案当然不是,这就是今天我们介绍的ADJ算法。同样的,android12后,在AMS中的算法源码被委托给了OomAdjuster类,它的主要职责就是计算进程的oom_adj值,也就是优先级。

2024-06-10 10:25:27 2100

原创 AMS进程管理--LRU篇

核心在于根据进程状态(是否存在activity和service)去调整mLruProcessServiceStart和mLruProcessActivityStart两个指针的位置,维护活动的列表中3个区域里各自进程优先级。

2024-06-09 14:51:05 653 2

原创 屏幕适配基础

屏幕适配基础之前有做过一些项目,用到的屏幕适配就是洪洋推荐的,根据分辨率,生成多套xml文件,不同分辨率对应不同xml布局,这样大概能覆盖80%的主流屏幕,一旦找不到对应的分辨率就GG。我也想过一个解决方法,对找不到对应分辨率的屏幕就加入默认一套xml。

2017-09-28 17:52:35 342

原创 Fragment坑之Can not perform this action after onSaveInstanceState

该情况一般发生在当前Activity等,系统会调用onSaveInstanceState()帮你保存当前Activity的状态、数据等,直到再回到该Activity之前(onResume()之前),你执行Fragment事务,就会抛出该异常!(一般是其他Activity的回调让当前页面执行事务的情况,会引发该问题)。曾在项目管理我的应用栏,三个按钮控制我的,更新,卸载栏,分别跳转不同fragmen

2017-05-14 11:30:47 744

原创 int和Integer有什么区别

为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型。栗子:public class Test { public static void main(String[] args) { Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.pri

2017-03-29 14:29:55 300

原创 getInstalledPackages的参数详解

getInstalledPackages

2016-07-04 17:54:06 6597 1

转载 Java设计模式

设计模式是每个程序员的必修课,这里将23种模式整理在一起,想学习这方面知识的朋友们有福了,呵呵。Singleton Pattern(单例模式):Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)

2016-05-13 20:21:54 323

原创 android学习之旅--BaseAdapter细节

AS调试的时候,发现BaseAdapter中的getView方法并没有回调,开始怀疑是不是该方法中不能打印日志,后来发现当adapter中getCount返回值为0,就不会调用该方法。于是排错得到结果。

2016-03-26 08:52:25 341

空空如也

空空如也

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

TA关注的人

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