<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qiushan_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qiushan_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qiushan_]]></copyright><item><title><![CDATA[【Android】【Framework】进程的启动过程]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/152832335</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/152832335</guid><author>qiushan_</author><pubDate>Thu, 09 Oct 2025 21:50:23 +0800</pubDate><description><![CDATA[入口函数是 ActivityThread.main：即进程创建完成后，Android Framework 层会在这个进程中将 ActivityThread 类加载进来，执行它的 main 函数，这个 main 函数就是进程执行消息循环的地方。天然支持 Binder IPC 机制：Android 应用程序进程在创建的时候，就已经启动了一个线程池来支持 Server 组件和 Binder 驱动程序之间的通信。应用进程在启动的过程中，可以获得一个虚拟机实例、一个 Binder 线程池和一个消息循环。]]></description><category></category></item><item><title><![CDATA[【Android】【Framework】PKMS]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/152829772</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/152829772</guid><author>qiushan_</author><pubDate>Thu, 09 Oct 2025 21:41:49 +0800</pubDate><description><![CDATA[PKMS（AOSP4.4.2）主要负责Android系统中应用程序的安装与管理。其启动过程包括SystemServer调用PKMS扫描系统目录中的APK文件，解析AndroidManifest.xml获取应用信息，并为应用分配Linux用户ID和组ID。DEX文件作为Dalvik虚拟机的可执行格式，在应用安装时由Java字节码转换生成，经过优化后由系统加载执行。PKMS通过ServiceManager注册为系统服务，管理/data/app等目录的应用安装，并维护应用的权限与用户ID信息。相关技术涉及多DEX]]></description><category></category></item><item><title><![CDATA[【Android】【Framework】消息处理机制]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/131410178</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/131410178</guid><author>qiushan_</author><pubDate>Tue, 27 Jun 2023 09:41:49 +0800</pubDate><description><![CDATA[消息处理机制（AOSP4.4.2）


Android 应用程序是通过消息来驱动的，系统为每一个应用程序维护一个消息队列，应用程序的主线程，不断地从这个消息队列中获取消息（Looper），然后对消息进行处理（Handler）。


消息存放在一个消息队列中（MessageQueue），应用程序的主线程围绕消息队列进入无限循环，直到应用程序退出。


如果队列中有消息，应用程序的主线程会把它取出，并分发给相应的 Handler 进行处理；如果队列中没有消息，应用程序的主线程会进入空闲等待状态，等待消息的到来。]]></description><category></category></item><item><title><![CDATA[fatal error: CSSGrammar.hpp: No such file or directory，fatal error: XPathGrammar.hpp: No such file o]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/125022672</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/125022672</guid><author>qiushan_</author><pubDate>Sat, 28 May 2022 20:34:48 +0800</pubDate><description><![CDATA[AOSP4.4.2编译：fatal error: CSSGrammar.hpp: No such file or directory，fatal error: XPathGrammar.hpp: No such file or directory
我使用ubuntu22.04，网上说是bison的版本问题，造成的这个错误，经过一番尝试未果。
target  C++: third_party_WebKit_Source_core_webcore_derived_gyp &lt;= out/target/pro]]></description><category></category></item><item><title><![CDATA[简明bitmap]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/121891229</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/121891229</guid><author>qiushan_</author><pubDate>Sun, 12 Dec 2021 18:37:52 +0800</pubDate><description><![CDATA[假设有一个unsigned char类型的变量a
a的取值在计算机中的表示范围为：0000 0000 ~ 1111 1111；
有这么几个数字0，1，5，5，3，8。

按照bitmap的方式建立映射（1代表有，0代表无）：

K→V
0→a：0000 0001
1→a：0000 0010
5→a：0010 0000
5→a：0010 0000
3→a：0000 1000
8→a：无法表示


将数字的值映射到比特位，就是bitmap的映射方式。
如上，假如数字0存在，那么a的第最低位就是1；假如数字5存在]]></description><category></category></item><item><title><![CDATA[Windows系统Gradle-修改.gradle默认目录]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/121705697</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/121705697</guid><author>qiushan_</author><pubDate>Fri, 03 Dec 2021 19:40:58 +0800</pubDate><description><![CDATA[在环境变量中新建一个环境变量：
GRADLE_USER_HOME
将值设置为：
示例：
D:xxx/.gradle
设置完成后,去Android studio下查看gradle的目录，自动变成了环境变量中的值了。

https://www.cnblogs.com/yongdaimi/p/10332761.html

...]]></description><category></category></item><item><title><![CDATA[如何使得电脑开机不用输入密码]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/121588444</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/121588444</guid><author>qiushan_</author><pubDate>Sun, 28 Nov 2021 11:08:30 +0800</pubDate><description><![CDATA[win+R运行：

取消勾选：

其他问题：如果该netplwiz界面没有这个选项的解决办法：
win+R输入：regedit进入注册表
将：
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\PasswordLess\Device
里面的的DevicePasswordLessBuildVersion由2设置为0。


...]]></description><category></category></item><item><title><![CDATA[Installation failed with message Failed to finalize session : INSTALL_FAILED_USER_RESTRICTED: Invali]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/121545505</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/121545505</guid><author>qiushan_</author><pubDate>Thu, 25 Nov 2021 19:35:35 +0800</pubDate><description><![CDATA[取消勾选


]]></description><category></category></item><item><title><![CDATA[Java通过new初始化（类的初始化过程）]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/121040689</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/121040689</guid><author>qiushan_</author><pubDate>Fri, 29 Oct 2021 18:51:14 +0800</pubDate><description><![CDATA[顺序:
注意：static成员只在类初始加载时，初始化一次。

父类static代码块
父类static成员变量
子类static代码块
子类static成员变量
父类成员变量
父类构造代码块
父类构造函数
子类成员变量
子类构造代码块
子类构造函数

class Father {
    static {
        System.out.println("父类static代码块");
    }

    private static int value1 = method1();
    priv]]></description><category></category></item><item><title><![CDATA[无码间串扰与采样定理的差异]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/119828312</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/119828312</guid><author>qiushan_</author><pubDate>Fri, 20 Aug 2021 17:35:06 +0800</pubDate><description><![CDATA[奈奎斯特抽样定理：
讨论模拟信号抽样后变为数字信号，信号频谱是否混叠问题。
它要求对于模拟信号的采样率大于或者等于2倍的信号带宽。即：Fs&gt;=2Fm。

无码间串扰的奈奎斯准则：
指的是信号经信道传输后，各个码元在时域上是否会出现前后重叠的问题。
它要求信道的频率响应为常数。
无码间串扰时必定满足：码元传输速率小于或者等于2倍的基带信道带宽。即：Rs&lt;=2W，或者Rb&lt;=2W*log2(M)。


...]]></description><category></category></item><item><title><![CDATA[Java中newInstance()和new()]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/119598251</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/119598251</guid><author>qiushan_</author><pubDate>Wed, 11 Aug 2021 10:48:21 +0800</pubDate><description><![CDATA[https://www.jianshu.com/p/de206c18ce08

]]></description><category></category></item><item><title><![CDATA[Java异常ClassCastException]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/119046053</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/119046053</guid><author>qiushan_</author><pubDate>Fri, 23 Jul 2021 23:09:37 +0800</pubDate><description><![CDATA[Java异常ClassCastException

]]></description><category></category></item><item><title><![CDATA[I2C:总线SDA=dat＞＞7； dat=dat＜＜1以及使用C语言输出二级制显示测试]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118614354</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118614354</guid><author>qiushan_</author><pubDate>Fri, 09 Jul 2021 20:48:47 +0800</pubDate><description><![CDATA[鄙人再看I2C的驱动时，发现如下两条语句：
SDA = dat&gt;&gt;7;
dat = dat&lt;&lt;1;
论坛上的解释如下：
SDA是只能有一个位的信息，如果你让SDA=dat的话（dat是字节）：
当dat里任何一位是1的：SDA就会是1；
当dat里全部位都是0，SDA就是0。
那么SDA要逐一地取dat的每一个位怎么办呢？
①dat&gt;&gt;7：
dat一个字节总共8个位的数据向右移7个位，原来的最高位就移到了最右的位置，左边7个位赋值0，SDA=dat&gt;&gt;7实际也]]></description><category></category></item><item><title><![CDATA[Type mismatch: cannot convert from java.sql.PreparedStatement to com.mysql.jdbc.PreparedStatement]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118463203</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118463203</guid><author>qiushan_</author><pubDate>Sun, 04 Jul 2021 15:51:18 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/mstk/p/4281724.html


]]></description><category></category></item><item><title><![CDATA[Java的==和equals()的区别]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118380126</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118380126</guid><author>qiushan_</author><pubDate>Thu, 01 Jul 2021 10:02:03 +0800</pubDate><description><![CDATA[public class A {
	public static void main(String[] args) {
		String s1 = "hello";
		String s2 = "hello";
		String s3 = new String("hello");
		System.out.println(s1 == s2);
		System.out.println(s1 == s3);
		System.out.print(s1.equals(s3));
	}
}

输出结果：


...]]></description><category></category></item><item><title><![CDATA[关于setContentPane()和getContentPane()的应用]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118311503</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118311503</guid><author>qiushan_</author><pubDate>Mon, 28 Jun 2021 20:45:09 +0800</pubDate><description><![CDATA[可以在 JFrame 对象中添加 AWT 或者 Swing 组件。但是不能直接用于添加组件，否则会抛出异常。造成这个现象的原因只有一个解释：**JFrame 不是一个容器，它只是一个框架。**那么，应该怎么添加组件呢？
JFrame 有一个 contentPane，窗口能显示的所有组件都是添加在这个 contentPane 中。
JFrame 提供了两个方法用于获取和设置其contentPane：
getContentPane () : 用于获取其 contentPane
setContentPane() ]]></description><category></category></item><item><title><![CDATA[java父类引用能赋值给子类引用吗？]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118281879</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118281879</guid><author>qiushan_</author><pubDate>Sun, 27 Jun 2021 23:07:00 +0800</pubDate><description><![CDATA[不能的，别像我一样，干这种傻事。

]]></description><category></category></item><item><title><![CDATA[java JFrame.add()与JFrame.setcontentPane()区别]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118253620</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118253620</guid><author>qiushan_</author><pubDate>Sat, 26 Jun 2021 19:42:40 +0800</pubDate><description><![CDATA[1：add() 是添加组件到容器JFrame里面；
2：setContentPane() 是替换容器Frame。
相关文档介绍：


]]></description><category></category></item><item><title><![CDATA[Java的GUI创建可关闭的窗口]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118195016</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118195016</guid><author>qiushan_</author><pubDate>Thu, 24 Jun 2021 20:11:58 +0800</pubDate><description><![CDATA[import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class A {
	public static void main(String[] args)

	{
		Frame f = new Frame("GUI");
		f.setSize(150, 150);
		M a = new M();
		f.addWindowListener(a);
		f]]></description><category></category></item><item><title><![CDATA[Java的this与return this]]></title><link>https://blog.youkuaiyun.com/qiushan_/article/details/118163394</link><guid>https://blog.youkuaiyun.com/qiushan_/article/details/118163394</guid><author>qiushan_</author><pubDate>Wed, 23 Jun 2021 22:02:54 +0800</pubDate><description><![CDATA[this：代表当前对象的引用
return this：返回当前对象的引用(就是实际调用这个方法的实例化对象)
class C {
	int i = 0;

	public C() {
		System.out.println(this);
	}

	C increment() {
		i++;
		System.out.println(this);
		return this;
	}

	void print() {
		System.out.println("i=" + i);
	}
}

public ]]></description><category></category></item></channel></rss>