<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gsj0722的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gsj0722</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gsj0722]]></copyright><item><title><![CDATA[探秘Kotlin协程机制]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/121976277</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/121976277</guid><author>gsj0722</author><pubDate>Thu, 16 Dec 2021 15:39:56 +0800</pubDate><description><![CDATA[1

]]></description><category></category></item><item><title><![CDATA[Android Studio快捷键大全]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/104520952</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/104520952</guid><author>gsj0722</author><pubDate>Wed, 26 Feb 2020 17:46:16 +0800</pubDate><description><![CDATA[参数提示
如果某个方法参数超级长，你不知道参数是什么怎么办？我们可以使用下面快捷键。
Ctrl + P

自动提取方法
我们在优化代码的时候，会看见有臭有长的代码，而我们传统的做法是新建一个函数，把代码复制过去，这个过程可以用使用下面快捷键完成。
Ctrl + Alt + M

自动提取参数
我们在开发过程中，发现函数用到的变量最好是当作参数传递进来比较好，如果手动修改要在每个添加函数的地方修改繁...]]></description><category></category></item><item><title><![CDATA[Binder设计与实现]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/102922586</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/102922586</guid><author>gsj0722</author><pubDate>Tue, 05 Nov 2019 20:01:25 +0800</pubDate><description><![CDATA[Binder Android IPC Linux 内核 驱动
摘要
Binder是Android系统进程间通信（IPC）方式之一。Linux已经拥有管道，system V IPC，socket等IPC手段，却还要倚赖Binder来实现进程间通信，说明Binder具有无可比拟的优势。深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对Binder的设计细...]]></description><category></category></item><item><title><![CDATA[Android系统启动-Init篇]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101621677</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101621677</guid><author>gsj0722</author><pubDate>Sun, 29 Sep 2019 10:09:52 +0800</pubDate><description><![CDATA[一、概述
init进程是Linux系统中用户空间的第一个进程，进程号固定为1。Kernel启动后，在用户空间启动init进程，并调用init中的main()方法执行init进程的职责。对于init进程的功能分为4部分：

解析并运行所有的init.rc相关文件
根据rc文件，生成相应的设备驱动节点
处理子进程的终止(signal方式)
提供属性服务的功能


...]]></description><category></category></item><item><title><![CDATA[Android进程创建流程]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101617848</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101617848</guid><author>gsj0722</author><pubDate>Sat, 28 Sep 2019 16:22:15 +0800</pubDate><description><![CDATA[进程创建过程的简要图：

图解：

App发起进程：当从桌面启动应用，则发起进程便是Launcher所在进程；当从某App内启动远程进程，则发送进程便是该App所在进程。发起进程先通过binder发送消息给system_server进程；
system_server进程：调用Process.start()方法，通过socket向zygote进程发送创建新进程的请求；
zygote进程：在执行Zyg...]]></description><category></category></item><item><title><![CDATA[Android消息机制--Handler实现原理]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101422573</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101422573</guid><author>gsj0722</author><pubDate>Fri, 27 Sep 2019 10:46:03 +0800</pubDate><description><![CDATA[设计Handler 的初衷
Java中有很多种方法实现线程之间的通信，例如：通过synchronized关键字以“上锁”机制实现线程间的通信。多个线程持有同一个对象，他们可以访问同一个共享变量，利用synchronized“上锁”机制，哪个线程拿到了锁，它就可以对共享变量进行修改，从而实现了通信；使用Object类的wait/notify机制，执行代码obj.wait();后这个对象obj所在的线...]]></description><category></category></item><item><title><![CDATA[ADB命令大全]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101351952</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101351952</guid><author>gsj0722</author><pubDate>Wed, 25 Sep 2019 11:23:53 +0800</pubDate><description><![CDATA[一、ADB 简介
ADB（Android Debug Bridge） 是一个通用命令行工具，其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利，如安装和调试应用。adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接，然后 PC 端的 adb client 通过 adb server 转发命令，adbd 接收命令后解析运行...]]></description><category></category></item><item><title><![CDATA[startActivity启动过程分析和Activity生命周期]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101288284</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101288284</guid><author>gsj0722</author><pubDate>Tue, 24 Sep 2019 16:13:38 +0800</pubDate><description><![CDATA[一、startActivity启动过程

启动流程：

点击桌面App图标，Launcher进程采用Binder IPC向system_server进程发起startActivity请求；
system_server进程接收到请求后，向zygote进程发送创建进程的请求；
Zygote进程fork出新的子进程，即App进程；
App进程，通过Binder IPC向sytem_server进程发起a...]]></description><category></category></item><item><title><![CDATA[Android中为什么主线程不会因为Looper.loop()里的死循环卡死？]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101269704</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101269704</guid><author>gsj0722</author><pubDate>Tue, 24 Sep 2019 10:46:18 +0800</pubDate><description><![CDATA[进程：每个app运行时前首先创建一个进程，该进程是由Zygote fork出来的，用于承载App上运行的各种Activity/Service等组件。进程对于上层应用来说是完全透明的，这也是google有意为之，让App程序都是运行在Android Runtime。大多数情况一个App就运行在一个进程中，除非在AndroidManifest.xml中配置Android:process属性，或通过na...]]></description><category></category></item><item><title><![CDATA[Android系统架构]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101266861</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101266861</guid><author>gsj0722</author><pubDate>Tue, 24 Sep 2019 10:18:35 +0800</pubDate><description><![CDATA[一、引言
Android底层内核空间以Linux Kernel作为基石，上层用户空间由Native系统库、虚拟机运行环境、框架层组成，通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写，通过JNI技术打通用户空间的Java层和Native层(C++/C)，从而连通整个系统。
下图是Google官方提供的经典分层架构图，从下往上依次分为Linux...]]></description><category></category></item><item><title><![CDATA[为什么 Android 要采用 Binder 作为 IPC 机制？]]></title><link>https://blog.youkuaiyun.com/gsj0722/article/details/101266204</link><guid>https://blog.youkuaiyun.com/gsj0722/article/details/101266204</guid><author>gsj0722</author><pubDate>Tue, 24 Sep 2019 09:48:41 +0800</pubDate><description><![CDATA[首先先介绍下Linux现有的所有进程间IPC方式：
1.管道：在创建时分配一个page大小的内存，缓存区大小比较有限；
2.消息队列：信息复制两次，额外的CPU消耗；不合适频繁或信息量大的通信；
3.共享内存：无须复制，共享缓冲区直接付附加到进程虚拟地址空间，速度快；但进程间的同步问题操作系统无法实现，必须各进程利用同步工具解决；
4.套接字：作为更通用的接口，传输效率低，主要用于不通机器或跨网络...]]></description><category></category></item></channel></rss>