吴小龙同學

党要我帅,我不得不帅!


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

如何实现一个 System Services?

发表于 2021-04-07 | 分类于 AOSP

《Android 系统开发做什么?》写到 Android System Services 是专注于特定功能的模块化组件,应用框架 API 所提供的功能可与系统服务通信,以访问底层硬件。Android System Services 是如何写的?来以 DisplayManagerService 为例,具体来看看。

System Service 是如何写的?

应用调用

1
2
3
DisplayManager dm = getSystemService(DisplayManager.class);
dm.setTemporaryBrightness(0.0f);
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 0);
阅读全文 »

Android 系统开发做什么?

发表于 2021-03-29 | 分类于 AOSP

题外话

18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿、写作,实践、反复修改去精心准备文章,另外也不知道该写什么了,很多经验心得都会涉及到项目本身,公司内部倒是写了不少总结文档,然而工作的事不便公开分享出来。我是一个在乎别人的看法,之前被很多人骂“江郎才尽”,其实我是很难受的。

在转 Framework 其实一开始我是很不适应,适应新环境也并没有想象当中那么容易,因此变得更不自信了,对自己的定位更加模糊,每半年换一个模块,从一开始做性能开发、转系统应用开发、又转通讯开发,刚有点感觉,因为工作调整,被安排做其他,技术没沉淀,总感觉虚的很。

Android 系统架构

阅读全文 »

你敢用一年时间改变自己吗?

发表于 2021-02-03 | 分类于 猿生活

这是来自知乎问题,好问题,我来回答一下。
从标题来看,我觉得可以解读下“敢”、“一年”、“改变”。

敢

“敢”代表一种决心,一种克制。

低级的欲望通过放纵得到;高级的欲望通过自律得到;顶级的欲望通过煎熬得到。

一年

“一年”代表一种毅力,其实不用一年,一个习惯养成大约需要 21 天,关键是你想做一件事,做完一天,记得再做第二天,坚持下去。习惯一旦养成是有瘾的,一天不做总感觉少了点什么。

改变

最重要的是“改变”,如何改变自己?

阅读全文 »

Android 9.0 SystemUI NavigationBar

发表于 2019-09-12 | 分类于 SystemUI

导航栏有返回(back),桌面(home),最近任务(recent),本篇主要学习这三个是如何加载的,点击事件在哪里写的?基于 AOSP 9.0 分析。

NavigationBar 创建是从 StatusBar#makeStatusBarView 开始的。

StatusBar#makeStatusBarView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
protected void makeStatusBarView() {
//省略其他代码
try {
boolean showNav = mWindowManagerService.hasNavigationBar();
if (DEBUG) Log.v(TAG, "hasNavigationBar=" + showNav);
if (showNav) {
createNavigationBar();
}
} catch (RemoteException ex) {
// no window manager? good luck with that
}
//省略其他代码
}
protected void createNavigationBar() {
mNavigationBarView = NavigationBarFragment.create(mContext, (tag, fragment) -> {
mNavigationBar = (NavigationBarFragment) fragment;
if (mLightBarController != null) {
mNavigationBar.setLightBarController(mLightBarController);
}
mNavigationBar.setCurrentSysuiVisibility(mSystemUiVisibility);
});
}
阅读全文 »

Android 9.0 SystemUI Notification

发表于 2019-08-12 | 分类于 SystemUI

本文主要分享 SystemUI Notification 具体如何呈现的?基于 AOSP 9.0 分析。

概述

在《Android 9.0 SystemUI 主要视图 SystemBars》知道通知在折叠时状态栏、下拉状态栏、锁屏都有通知,其中锁屏和下拉状态栏是一个布局,折叠状态栏 是在 CollapsedStatusBarFragment,status_bar.xml,PhoneStatusBarView,锁屏是 NotificationStackScrollLayout,@+id/notification_stack_scroller,先来看看锁屏的通知,NotificationStackScrollLayout 是 ViewGroup,如果来了条通知,肯定是有地方进行 addView,我们就沿着这个思路去 AOSP 寻找答案。

阅读全文 »

Android 9.0 SystemUI 下拉状态栏快捷开关

发表于 2019-07-05 | 分类于 SystemUI

SystemUI 下拉状态栏快捷开关是 QSPanel,qs_panel.xml,@+id/quick_settings_panel,本篇文章就来看看这些快捷开关是如何呈现的以及如何新增一个快捷开关?基于 AOSP 9.0 分析。

SystemUI 下拉状态栏快捷开关

QSPanel 创建是从 StatusBar#makeStatusBarView 开始的。

StatusBar#makeStatusBarView

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
protected void makeStatusBarView() {
//省略其他代码
final QSTileHost qsh = SystemUIFactory.getInstance().createQSTileHost(mContext, this,
mIconController);
mBrightnessMirrorController = new BrightnessMirrorController(mStatusBarWindow,
(visible) -> {
mBrightnessMirrorVisible = visible;
updateScrimController();
});
fragmentHostManager.addTagListener(QS.TAG, (tag, f) -> {
QS qs = (QS) f;
if (qs instanceof QSFragment) {
((QSFragment) qs).setHost(qsh);
mQSPanel = ((QSFragment) qs).getQsPanel();
mQSPanel.setBrightnessMirror(mBrightnessMirrorController);
mKeyguardStatusBar.setQSPanel(mQSPanel);
}
});
//省略其他代码
}
阅读全文 »

Android 9.0 SystemUI 主要视图 SystemBars

发表于 2019-06-03 | 分类于 SystemUI

SystemBars 是 SystemUI 主要视图,接下来看看它是如何呈现?基于 AOSP 9.0 分析。

SystemBars#start

SystemBars 启动中 mServices[i].start() 将调用 SystemBars.start():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class SystemBars extends SystemUI {
//省略部分代码
private SystemUI mStatusBar;
@Override
public void start() {
if (DEBUG) Log.d(TAG, "start");
createStatusBarFromConfig();
}
//省略部分代码
private void createStatusBarFromConfig() {
if (DEBUG) Log.d(TAG, "createStatusBarFromConfig");
final String clsName = mContext.getString(R.string.config_statusBarComponent);
if (clsName == null || clsName.length() == 0) {
throw andLog("No status bar component configured", null);
}
Class<?> cls = null;
try {
cls = mContext.getClassLoader().loadClass(clsName);
} catch (Throwable t) {
throw andLog("Error loading status bar component: " + clsName, t);
}
try {
mStatusBar = (SystemUI) cls.newInstance();
} catch (Throwable t) {
throw andLog("Error creating status bar component: " + clsName, t);
}
mStatusBar.mContext = mContext;
mStatusBar.mComponents = mComponents;
mStatusBar.start();
if (DEBUG) Log.d(TAG, "started " + mStatusBar.getClass().getSimpleName());
}
//省略部分代码
}

阅读全文 »

Android 9.0 SystemUI 启动流程

发表于 2019-05-02 | 分类于 SystemUI

基于 AOSP 9.0 分析。

开机流程

开机大致会经历如下几个过程:

  1. uboot 在引导 os 启动,然后加载 kernel;
  2. 当 kernel 加载完成后,进入 init 进程,fork 出 zygote,然后由 zygote 去启动 SystemServer;
  3. SystemServer 会启动系统运行所需的众多核心服务和普通服务,以及初始化和加载一些应用;
  4. 之后就进入到锁屏或者 Launcher,开机过程就基本结束了。

SystemUI 启动就是从 SystemServer 开始的。

阅读全文 »

Android 当点击飞行模式都发生了什么?

发表于 2019-04-14 | 分类于 AOSP

今天中午午休时,我把手机开飞行模式了,能看到 WiFi 、蜂窝数据和蓝牙都关闭了,心想,这时候还能收到短信吗?顺着好奇心,我们不妨来研究一下源码,看看点击飞行模式都发生了什么?

基于 Android 9.0 源码分析。

AirplaneModeTile#handleClick

飞行模式设置入口,下拉状态栏,点击飞行模式图标,我们就从这里看起,其他入口逻辑差不多。这个源码位于AOSP/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/AirplaneModeTile.java直接看其点击事件。

阅读全文 »

Android 亮度自动调节

发表于 2019-03-18 | 分类于 AOSP

下拉状态栏有个亮度的进度条,如果开启了亮度自动调节开关,会随着周围光线变化,这个进度条也会随着变化,接下来就是看看这个功能是如何实现的。

源码版本

基于 Android 9.0 分析。

BrightnessDialog,位于:
frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java

阅读全文 »

12…16
吴小龙同學

吴小龙同學

公众号:吴小龙同学

154 日志
43 分类
116 标签
RSS
WeChat GitHub 知乎 Weibo
© 2013 – 2024 吴小龙同學
由 Hexo 强力驱动 v3.4.2
|
主题 – NexT.Gemini v6.7.0