学习日志10.17

 

10.17

 systemui其实结构是比较复杂,里面管理各种服务,导航栏,状态栏,近期列表,下拉菜单,关机界面等,其中以导航栏和状态栏,近期列表用的比较多,也是本博文会重点讲解的内容。从结构上来讲下拉菜单和状态栏都是属于statusbar,结构树上也是属于顶层的super_status_bar.xml

顶层树是super_status_bar,之后会走两个分支status_bar_container和status_bar_expanded,

  • status_bar_container这个分支主要呈现的是状态栏界面,状态栏细分左边和右边,左边是通知栏,右边是系统功能的状态图标显示,
  • status_bar_expanded这个分支主要呈现的下拉菜单界面,其实下拉菜单中又分快捷图标和短信通知栏,


原文链接:https://blog.youkuaiyun.com/Bill_xiao/article/details/108244267

Android中的Bn端和Bp端类似服务端和客户端

相信就不会对Binder架构中代表Client的Bp端及代表Server的Bn端感到陌生。Java层中Binder实际上也是一个C/S架构,并且其在类的命名上尽量保持与Native层一致。

《深入理解Android 卷III》第二章 深入理解Java Binder和MessageQueue - gccbuaa - 博客园

在方法内创建了一个字符数组names,读取res/values/config.xml文件中定义的数组config_systemUIServiceComponents里面包含了各种SystemUI的各个组件和服务类的完整路径,之后通过循环和反射调用各个组件的start方法,并将它们放入一个SystemUI数组管理;

Java子类是否要实现父类中所有的抽象方法

java中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗

简单总结,需要重写的有:

普通类继承抽象类,重写所有抽象类方法;(不包括普通方法)

普通类继承接口,重写所有接口方法。(不包括default关键字修饰的方法)

详解见下:

1. 普通类继承,并非一定要重写父类方法。

2. 抽象类继承,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。

3. 接口类继承。如果是一个子接口,可以扩展父接口的方法;如果是一个子抽象类,可以部分或全部实现父接口的方法;如果子类不是抽象类,则要求子类一定要实现父接口中定义的所有方法。

不一定,关键要看子类是否是抽象类。

    如果子类是非抽象类,则必须实现接口中的所有方法;  

    如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!


简单总结:

  • 如果是抽象子类可以不实现或重写父类的所有抽象方法、接口。
  • 不是抽象的就要实现全部抽象方法或接口。

Android SystemUI(二):启动流程和初始化 - 腾讯云开发者社区-腾讯云

systemui的常用组件主要有

  1. StatusBar:通知消息提示和状态展现
  2. NavigationBar:导航栏 返回,HOME,Recent
  3. KeyGuard:锁屏模块可以看做单独的应用,提供基本的手机个人隐私保护
  4. Recents:近期应用管理,以堆叠栈的形式展现。
  5. Notification Panel:通知栏 展示系统或应用通知内容。提供快速系统设置开关。
  6. VolumeUI:来用展示或控制音量的变化:媒体音量、铃声音量与闹钟音量
  7. 截屏界面:长按电源键+音量下键后截屏,用以展示截取的屏幕照片/内容
  8. PowerUI:主要处理和Power相关的事件,比如省电模式切换、电池电量变化和开关屏事件等。
  9. RingtonePlayer:铃声播放
  10. StackDivider:控制管理分屏
  11. PipUI:提供对于画中画模式的管理

启动流程

启动流程主要包括两个部分

•在 framework 中启动 SystemUIService•在 SystemUIService 中启动 SystemUI 所需的各种组件

framework 中的流程

SystemUI 是系统应用,所以它也是一个 APK,有入口 Application,只不过它是由 SystemServer 进程进行启动的。

  • SystemUI 服务的启动就是在 startOtherServices() 里面
  • (SystemServer的代码对系统服务类别大体分为三类:Bootstrap->Core->Other,SystemUI的启动就在Other中)。
  • 在startOtherServices()中,通过调用AMS的systemReady()方法通知AMS准备就绪。systemReady()拥有一个名为goingCallback的Runnable实例作为参数,So,当AMS完成对systemReady()的处理后将会回调这一Runnable的run()方法。
  • 对于Android系统来说,当一个应用启动,系统会保证其Application类是第一个被实例化的类,并且Application的onCreate方法,一定先于应用中所有的Activity,Service和BroadcastReceiver的创建。
  • SystemUI 的启动流程:最终通过调用各自service组件的start方法,有序完成所有组件的初始化。SystemBars的start方法,通过读取strings中配置的类名,初始化对应的StatusBar组件。

SystemUI中,SystemUIApplication就是第一个被实例化的类。

在其中,定义了两组服务:

  • 一类是所有用户共用的SystemUI服务,例如:Status Bar
  • 一类是每个用户独有的服务
  • SystemUI抽取了功能模块的共性形成抽象类SystemUI.class,上图中所有列出的类型,均是SystemUI的子类实现。
  • systemui app启动时序图
  • 上图流程走完就是各模块单独的初始化逻辑了
  • SystemBars主要包含了NavigationBar和StatusBar

要说status_bar.xml,不得不提的则是super_status_bar.xml。这个layout,一看名字就很super。它是整个status bar的 root 布局。它的加载流程如下:

StatusBar.java

-> start

-> createAndAddWindows

-> addStatusBarWindow

-> makeStatusBarView

-> inflateStatusBarWindow

inflateStatusBarWindow方法中有一句mStatusBarWindow = View.inflate(context,R.layout.super_status_bar,null);

变量mStatusBarWindow与其对应。它是一个StatusBarWindowView类,继承FrameLayout,负责整体框架上的排版和绘制,部分事件的监听及分发。super_status_bar.xml的布局主要包含如下:

 在onViewCreated中,加载了statusIcons布局。

Ubuntu环境代码同步

 下载遇到问题 提示无法下载 

更改下载源  

更改

# deb cdrom:[Ubuntu 18.04.6 LTS _Bionic Beaver_ - Release amd64 (20210915)]/ bionic main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic universe
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates universe
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-updates multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted

 需要配置ssh wind端和Ubuntu的都不一样

查看ssh  ls -al ~/.ssh

对应的目录真的不存在  是git-repo/repo

 此种情况可能是因为没有配置repo

 然后 

Ubuntu下面的终端和gitbrash差不多  都是下载东西都是下载到当前目录下  所以想要下载到想下载的目录下就需要用cd命令到想下载的目录下,或者是用命令指定下载的路径

解压可以用tar -xvf 文件名 -C 解压的路径     也可手动解压移动打破解压的目录下

根目录不是主目录 看隐藏文件可以ctrl+c  没有文件夹的时候创建一个也可以的

 错误

账号可以是名字@ip:端口号

也可能有的时候就是名字就可以

记得初始化这个概念

 这个问题 有可能是path的原因 也有可能是没安装对目录 也有可能是 命令没打对  

直接输入命令只是一个临时的环境变量

在用户主目录下  有很多类似.ssh .bashrc等设置

在winds查看cpu内核数量 可以在任务管理器 或者是设备管理器

 

 

  然后 虚拟机这里设置内核数量  编译代码时

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值