<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hfreeman2008的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hfreeman2008</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hfreeman2008]]></copyright><item><title><![CDATA[关于技术博客的调整]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/139917723</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/139917723</guid><author>hfreeman2008</author><pubDate>Mon, 24 Jun 2024 10:15:29 +0800</pubDate><description><![CDATA[andjroid系统开发主要是在：
https://github.com/hfreeman2008/android_core_framework我的github:
https://github.com/hfreeman2008/]]></description><category></category></item><item><title><![CDATA[Android系统开发之TimeZoneDetectorService浅析--下]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/135895224</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/135895224</guid><author>hfreeman2008</author><pubDate>Sun, 28 Jan 2024 14:33:25 +0800</pubDate><description><![CDATA[可以看出TimeZoneDetectorService类，其具体实现是由TimeZoneDetectorStrategy类完成的。]]></description><category></category></item><item><title><![CDATA[Android系统开发之TimeZoneDetectorService浅析--上]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/135871074</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/135871074</guid><author>hfreeman2008</author><pubDate>Fri, 26 Jan 2024 17:22:33 +0800</pubDate><description><![CDATA[客户有一个关闭通话功能的需求，根据MTK的配置方法关闭了大概8个宏开关后，实现通话功能，但是导致插好sim卡开机后，时间和时区不能更新的问题。]]></description><category></category></item><item><title><![CDATA[Android系统开发之浅谈广播接收器回调]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/135635532</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/135635532</guid><author>hfreeman2008</author><pubDate>Tue, 16 Jan 2024 21:19:16 +0800</pubDate><description><![CDATA[广播Intent和广播接收器BroadcastReceiver，是大家android开发用的特别多的二个控件。那如何从系统角度看待广播和广播接收器呢？对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢？此文章以Android13版本为例，试浅分析之。]]></description><category></category></item><item><title><![CDATA[再谈谷歌GMS认证之Android 13]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/134425087</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/134425087</guid><author>hfreeman2008</author><pubDate>Fri, 17 Nov 2023 09:21:13 +0800</pubDate><description><![CDATA[2023年来到一个新的公司，传说中的做互联网金融即将上市的高大上公司。
入职后才发现就是做pos机设备的一个小厂
哎，什么命啊！
工作和手机开发的工作重合度可以达到95%以上，我不想做手机，偏偏又干上了老本行了。
来吧，兄弟，开始你的新公司的工作旅程吧。慢着，差点忘了介绍一下我的一个兄弟，非常重要的难兄难弟。
我们叫他x吧，x，武汉大学毕业，从业10+年手机开发，第二次入职此公司，和我同一天入职。入职后，我负责一个S项目，他负责一个O项目。公司原来系统组大概有个20来个人吧，在做一个T项目。今年疫情结束了，]]></description><category></category></item><item><title><![CDATA[android开发浅谈之PackageManagerService(pkms)]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/118160530</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/118160530</guid><author>hfreeman2008</author><pubDate>Wed, 23 Jun 2021 19:40:39 +0800</pubDate><description><![CDATA[本文基于Android10.0
主要从以下几个方面着手：
PKMS启动
PKMS安装APK
PKMS卸载APK
PKMS启动
这里我简单的将其分为以下几个步骤：

1.SystemServer通过PKMS的main方法启动PKMS
2.PKMS构造方法中初始化Settings
3.扫描各个系统目录下APP相关信息

1.SystemServer通过PKMS的main方法启动PKMS
PKMS启动是在SystemServer.startBootstrapServices:
mPackageManagerSer]]></description><category></category></item><item><title><![CDATA[android开发浅谈之写在前面的话]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/118033325</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/118033325</guid><author>hfreeman2008</author><pubDate>Fri, 18 Jun 2021 20:48:05 +0800</pubDate><description><![CDATA[自我介绍
先简单的介绍一下我的工作经历吧。




时间
东家
主要工作




2011年8月
深圳大学毕业
整上午整下午的看网上的新品手机，那是安卓开始崛起的前夜


2011年8月----2013年8月
深圳康佳通信科技
android app开发


2013年8月----2014年12月
深圳鸿宇顺科技
android app开发


2015年1月----2018年3月
深圳天珑移动
app开发，gms认证，订单交付，开始有点系统工程师的影子


2018年3月----2019年9月
深圳瑞高智]]></description><category></category></item><item><title><![CDATA[android开发浅谈之InputMethodManagerService]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/117963600</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/117963600</guid><author>hfreeman2008</author><pubDate>Wed, 16 Jun 2021 17:46:44 +0800</pubDate><description><![CDATA[输入法管理服务的整体框架
输入法的整件框架：

参考资料
1.Android输入法框架系统(上)
https://blog.youkuaiyun.com/ITleaks/article/details/27398453?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162383108116780264086746%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%25]]></description><category></category></item><item><title><![CDATA[android开发浅谈之窗口管理Z-Order]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/116241583</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/116241583</guid><author>hfreeman2008</author><pubDate>Wed, 28 Apr 2021 19:44:34 +0800</pubDate><description><![CDATA[问题的描述：
软件版本为android 10.0, 测试提了一个bug，手机在不分屏时在输入法界面，toast正常显示；但是手机在分屏时，因为显示了输入法界面,toast虽然调用了，但是被输入法界面遮挡看不到。
问题分析：
那这个明显是窗口z-order管理问题，那我们先看看window的dumpsys信息：
adb shell dumpsys window windows

输入法window:
  Window #0 Window{1ac9429 u0 InputMethod}:
    mDispla]]></description><category></category></item><item><title><![CDATA[android开发浅谈之App启动过程二]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/115530732</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/115530732</guid><author>hfreeman2008</author><pubDate>Thu, 08 Apr 2021 20:52:05 +0800</pubDate><description><![CDATA[启动app整体框架图
这是直接copy Gityuan同学的启动app的整体框架图：

启动流程：
1.点击桌面App图标，Launcher进程采用Binder IPC向system_server进程发起startActivity请求；
2.system_server进程接收到请求后，向zygote进程发送创建进程的请求；
3.Zygote进程fork出新的子进程，即App进程；
4.App进程，通过Binder IPC向sytem_server进程发起attachApplication请求；
5.syst]]></description><category></category></item><item><title><![CDATA[android开发浅谈之WindowToken,AppWindowToken,Task,TaskStack和DisplayContent]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/113589077</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/113589077</guid><author>hfreeman2008</author><pubDate>Wed, 03 Feb 2021 11:24:20 +0800</pubDate><description><![CDATA[WindowToken 类
WindowToken 定义和关键变量
我们先查看windowtoken类的源码：
/**
 * Container of a set of related windows in the window manager. Often this is an AppWindowToken,
 * which is the handle for an Activity that it uses to display windows. For nested windows, there i]]></description><category></category></item><item><title><![CDATA[android开发浅谈之WindowState]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/113527942</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/113527942</guid><author>hfreeman2008</author><pubDate>Mon, 01 Feb 2021 19:55:25 +0800</pubDate><description><![CDATA[什么是WindowState
WindowState表示一个窗口的所有属性，它是WMS中事实上的窗口.
其源码中定义为：
/** A window in the window manager. */
class WindowState extends WindowContainer&lt;WindowState&gt; implements WindowManagerPolicy.WindowState {

WindowState也就是WindowState是WMS中的一个窗口。
借用别人的一张图片来表示]]></description><category></category></item><item><title><![CDATA[android开发浅谈之ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/113309272</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/113309272</guid><author>hfreeman2008</author><pubDate>Thu, 28 Jan 2021 10:29:54 +0800</pubDate><description><![CDATA[ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord,这几个关键的类，我以前一直搞不清其具体关系，看了android里面的Activity体系结构(1)_ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord这篇文章后，才有了一点点明白，对应也做一个笔记。
整体关系图如下
我直接复制他的图片：
通过adb shell dumpsys activity activities 命令可以看到如下打印：]]></description><category></category></item><item><title><![CDATA[android开发浅谈之configChanges理解]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/112634804</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/112634804</guid><author>hfreeman2008</author><pubDate>Thu, 14 Jan 2021 20:23:22 +0800</pubDate><description><![CDATA[am_relaunch_resume_activity: [0,27273074,89,com.cebbank.mobile.cemb/.ui.activity.HomeActivity

com.android.server.wm.ActivityRecord.relaunchActivityLocked(ActivityRecord.java:3571)
com.android.server.wm.ActivityRecord.ensureActivityConfiguration(ActivityRe]]></description><category></category></item><item><title><![CDATA[android开发浅谈之KeyEvent事件处理]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/112336562</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/112336562</guid><author>hfreeman2008</author><pubDate>Thu, 07 Jan 2021 20:44:01 +0800</pubDate><description><![CDATA[一个key事件的调用过程
一个偶然的机会，有一个报错的问题，日志如下：
AndroidRuntime: 	at android.view.View.performClick(View.java:7259)
AndroidRuntime: 	at android.view.View.performClickInternal(View.java:7236)
AndroidRuntime: 	at android.view.View.onKeyUp(View.java:14697)
AndroidRuntime:]]></description><category></category></item><item><title><![CDATA[android开发浅谈之App启动过程]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/112134467</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/112134467</guid><author>hfreeman2008</author><pubDate>Sun, 03 Jan 2021 14:16:22 +0800</pubDate><description><![CDATA[概述
当你点击桌面App的图标到底发生了什么，上篇文章我们大概简述了流程

App发起进程：

如果从桌面启动应用，则发起进程便是Launcher所在的进程，当从某App启动远程进程，则发起进程是App所在的进程，发起进程首先需要通过Binder发送信息给system_server进程

system_server进程：

调用Process.start方法，通过Socket向Zygote进程发送新建进程的请求
zygote进程：在执行ZygoteInit.main()后进入runSelectLoop()循]]></description><category></category></item><item><title><![CDATA[android开发浅谈之View测量流程(Measure)]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/111996784</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/111996784</guid><author>hfreeman2008</author><pubDate>Wed, 30 Dec 2020 19:18:46 +0800</pubDate><description><![CDATA[从ViewRootImpl#PerformTraveals说起
我们直接从这个方法说起，因为它是整个工作流程的核心，我们看看它的源码：
参考资料
(1)Android 理解Window和WindowManager
https://blog.youkuaiyun.com/qq_34760508/article/details/103086195
(2)Android App启动过程
https://juejin.cn/post/6844903933802987528
(3)Android View源码解读：浅谈Decor]]></description><category></category></item><item><title><![CDATA[android开发浅谈之DecorView与ViewRootImpl]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/111913489</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/111913489</guid><author>hfreeman2008</author><pubDate>Tue, 29 Dec 2020 14:54:12 +0800</pubDate><description><![CDATA[前言
对于Android开发者来说，View是开发中使用最多的。View重点包括事件分发机制，测量，布局，绘制等。这篇文章我们从Activity入手，看看从Activity创建后到View的正式工作之前的流程，此分析的代码以android 10.0为参考。


...]]></description><category></category></item><item><title><![CDATA[android开发浅谈之Window和WindowManager]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/111882109</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/111882109</guid><author>hfreeman2008</author><pubDate>Tue, 29 Dec 2020 13:00:31 +0800</pubDate><description><![CDATA[android开发浅谈之Window和WindowManager概述WindwoMagaer来添加一个WindowTYPE 窗口的属性ViewManager类Window的内部机制Window的添加过程6.Window的更新过程参考资料：
概述
Window表示窗口的概念，他是一个抽象类，他的真正实现类是PhoneWindow，WindowManager用来对Window进行管理，是外接访问Window的入口，Window操作的具体实现是在WindowManagerService中，WindowMager和]]></description><category></category></item><item><title><![CDATA[Android Studio创建aar或jar库模块]]></title><link>https://blog.youkuaiyun.com/hfreeman2008/article/details/106905228</link><guid>https://blog.youkuaiyun.com/hfreeman2008/article/details/106905228</guid><author>hfreeman2008</author><pubDate>Mon, 22 Jun 2020 17:07:12 +0800</pubDate><description><![CDATA[我们开发时，经常需要给合作方提供aar,或jar库文件，这个是如何使用Android Studio创建的呢？
创建Module
在Android Studio中新建一个APP项目，然后在此APP项目中File–New–New Module，创建一个Module
,其中类型选择Android Library.

然后，配置对应的Library name,Module name,Package name:

在mylibrary的Module中，打开build.gradle，我们配置生成的aar名字：

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