自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

neuHenry

一个还没入门但追求技术的程序员

  • 博客(74)
  • 资源 (2)
  • 收藏
  • 关注

原创 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程

上一篇文章深入探索了 Android Framework 的输入系统 IMS 的构成与启动,对 IMS 的重要成员有了初步的理解,然后通过源码对 IMS 的整个启动流程进行分析,在 IMS 启动并准备就绪后,输入系统就可以从设备节点源源不断的抽取输入事件,并交给事件处理者进行加工处理,即输入子系统 InputReader。本篇将深入探索 InputReader 的工作流程,它是如何从设备节点将输入事件交给 InputDispatcher 的派发的?

2024-01-19 19:30:29 708

原创 深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动

Android 输入系统(Input System)的工作原理,包括:输入设备的管理、输入事件的加工方式及派发流程。首先输入设备包括:触摸屏,键盘,鼠标和手柄等,其中触摸屏与键盘是 Android 最普遍也是最标准的输入设备。当用户操作输入设备时,Linux内核接收到相应的硬件中断,然后将中断加工成原始的输入事件数据并写入其对应的设备节点中,在用户空间可以通过输入系统内部的读取函数将原始事件数据读出,并进行一系列翻译加工成Android输入事件,然后在所有的窗口寻找合适的事件接收者,并派发给它来消费该事件

2023-11-28 16:28:28 1140

原创 深入Android S(12.0)探索Framework之SystemServer进程的启动详解

SystemServer 作为 Zygote 进程 fork 出的第一个进程,其进程名为:system_server。其承载着整个 Framework 的核心服务,如创建并启动 ActivityManagerService、PackageManagerService、WindowManagerService、InputManagerService 等 90 多个核心系统服务。接下来一起深入学习一下 SystemServer 进程的创建与启动流程。

2023-11-14 23:27:11 317

原创 Kotlin 开篇之基础语法篇

Kotlin 语言由程序语言开发工具的知名供应商 JetBrains 构思于 2010 年,它是一种针对 Java 平台的新编程语言 (基于 JVM 的语言)。Kotlin 简洁、安全、务实,并且专注于与 Java 代码的互操作性。它几乎可以用在现在 Java 使用的任何地方:服务端开发、Android 应用等等。Kotlin 可以很好地和所有现存的 Java 库和框架一起工作,且性能水平和 Java 旗鼓相当,同时作为一种新语言,它包含了许多新的特性,由此也决定着 Kotlin 的代码风格。.......

2022-08-10 17:04:15 821 1

原创 深度详解 Android R(11.0)Service 启动过程

服务 (Service) 是 Android 系统中 4 大应用程序组件之一,主要用途有:后台运行和跨进程访问。通过启动服务可以在不显示界面的前提下在后台执行那些不需要和用户交互且长期运行的任务,即使程序切换到后台,或者用户打开了另一个应用程序,服务仍然能够保持独立运行。通过 AIDL 服务可以实现不同进程之间的数据通信,后面详细解析。Service 的存在形式:本地服务、远程服务和前台服务。Service 的状态:启动状态和绑定状态,也可以说成是服务的两种启动方式。.........

2022-08-03 00:35:26 2103 1

原创 深度详解 Android 之 Context

在 Android 开发中、亦或是面试中都离不开四大组件的身影,而在创建或启动这些组件时,并不能直接通过 new 关键字后跟类名来创建实例对象,而是需要有它们各自的上下文环境,也就是本篇文章要讨论的 Context。Context 提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被 Android 系统所提供。它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文。............

2022-07-18 22:19:56 6711

原创 深度详解 View.post() 为何能够获取到 View 的宽高值?

在文章中通过分析源码解析了获取不到 View 宽高值的原因,在文章结尾处留了一个问题,是打算后面继续分析解读的,但是却给忘了,欠下的总归是要弥补的,因此这里来补上,本文就来深度详解 View.post() 为何能够获取到 View 的宽高值?...............

2022-07-10 14:53:35 1697 7

原创 深度详解 Android S(12.0)屏幕刷新机制之 Choreographer

Android 的 UI 渲染性能是 Google 工程师们长期以来非常重视的,随着 Android 系统的不断演进和完善,Google 在 2012 年的 I/O 大会上宣布 Project Butter 计划,并在 Android 4.1 中正式开始实施,以优化 UI 渲染流畅性的问题。Project Butter 对 Android Display 系统进行了重构优化,引入了三个核心元素,即 VSYNC、Triple Buffering 和 Choreographer。..............

2022-06-30 23:22:35 3542 1

原创 深度详解 Android R(11.0)Activity 启动过程

文章目录前言一、Launcher进程请求ATMS1. Launcher 桌面的 App 图标入口2. Launcher ## startActivitySafely() 方法二、ATMS发送创建应用进程请求三、Zygote进程接受请求并孵化应用进程四、应用进程启动ActivityThread1.引入库2.读入数据总结前言面试中经常会被问到,让面试者简述一下 Activity 的启动流程,这个问题是考察面试者对源码的理解程度,要征服面试官获得满意的 offer 还是需要一步步深入去探索一下源码,梳理启动

2022-05-22 23:43:32 4004 4

原创 Jetpack Room 使用及原理解析

Room 是 Google 官方推出的数据库 **ORM 框架**。ORM:即 Object Relational Mapping,即对象关系映射,也就是将关系型数据库映射为面向对象的语言。使用 ORM 框架,我们就可以用面向对象的思想操作关系型数据库,不再需要编写 SQL 语句。Room 是在 **SQLite** 的基础上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够更简便的访问数据库。

2022-05-17 21:54:13 2470

原创 分析 ViewModel 在配置改变后是怎么留存数据的

我们知道,页面在旋转屏幕后会导致配置信息的改变,并触发页面的销毁重建,这时存储有 ViewModel 的 ViewModelStore 会保存在 ActivityClientRecord.lastNonConfigurationInstances,在页面重建时 ActivityThread.performLaunchActivity 方法中调用 Activity.attach 方法,再将 NonConfigurationInstances 实例传给重建后的 Activity 的 mLastNonConfig

2022-05-14 17:54:23 456

原创 Jetpack ViewModel 使用及原理解析

ViewModel 是以能感知生命周期的方式存储和管理界面相关数据的组件。感知生命周期是说当 Activity 或 Fragment 创建第一个实例的时候,它开始创建;当 Activity 销毁或者 Fragment 分离的时候,它自动清理。存储和管理界面相关数据即 ViewModel 保存的数据,在页面因配置变更(如横竖屏切换、分辨率调整、权限变更、系统字体样式变更等)导致页面销毁重建之后依然也是存在的。

2022-05-14 16:52:01 890

原创 Jetpack LiveData 使用及原理解析

LiveData 是一种可观察的、粘性的数据存储类。与常规的可观察类不同,LiveData 具有生命周期感知能力,具有生命周期感知的组件,一般指 Activity、Fragment 等,但不局限于此,更泛指实现了 Lifecycle.LifecycleOwner 的组件。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件的观察者。

2022-05-10 20:23:17 814

原创 Jetpack Lifecycle使用及原理解析

Jetpack Components 学习之 Lifecycle,Lifecycle 提供了可用于构建生命周期感知型组件的类和接口,可以感知 Activity、Fragment 的生命周期并根据 Activity、Fragment 的当前生命周期状态在其相应的回调事件中调整其自身的行为,能有效的避免内存泄漏。

2022-05-09 19:01:08 964

原创 Flutter由其他页面回到当前页面时监听并刷新当前页面的内容

项目中经常遇到这样的场景,比如很多App都有的收藏、点赞列表等,当我们从收藏列表点击一个item项进入到详情页时,用户点击了取消收藏,那么当我们点击返回到收藏列表页时,App需要主动刷新收藏列表的数据。在原生开发时,我们可以在收藏列表页的 onResume( ) 方法中重新请求数据并刷新列表。也可以做事件监听,不过没必要哈,事件监听比较适合那种跨页面的。那么,Flutter 开发中,我们该如何实现该需求呢?答案:Flutter 监听路由返回push( ).then( ):在 then 的函数体内重

2021-03-23 14:45:05 6384

原创 Flutter开发中使用fish_redux怎样在页面中创建TabController呢?

目前 Flutter 开发中,没有像 Android 那么好的生态,开发框架也没有 Android 那样的 mvc、mvp、mvvm 那么成熟,目前 Flutter 开发使用的框架,更多的说的是状态管理。目前 Flutter 成熟的状态管理有如下几种:scope_model (provider) : Google 原生的状态管理,通过封装 InheritedWidget 实现了状态管理,而且一并提现 Google 的设计思想,单一原则,这个 Package 仅仅作为状态管理来用,几乎没有学习成本,如果

2020-11-30 00:17:29 525

原创 Flutter 多版本管理工具

        Flutter 作为当下比较热门的跨端开发利器,受到了越来越多的开发者的追捧,笔者也是小粉丝哈,热衷于追求新技术。由于 Flutter 目前还处于高速发展的阶段,开发者提出的 issues 很多( 目前近8k ),所以 Flutter 团队需要不断的更新版本来解决开发者提出的这些问题,这就导致 Flutter 的版本更新比较快。上一个工程还是基于版本 1.19.* 创建的,等到再新建一个工程时,就需要用到版本 1.22.# 啦!  面对这么多的版本

2020-11-23 17:11:51 2826

原创 Flutter中使用ListView时如何更有效的设置Item项间距?

App开发中,列表的使用是比较常见的场景,Android原生开发时,ListView 是最常用的滑动组件,后来 Google 又推出了功能更加强大,使用更加灵活的 RecyclerView。同样,在 Flutter 开发中,系统也提供了 ListView 用于实现列表滑动的滑动组件,它可以沿一个方向线性排布所有子组件,并且支持基于 Sliver 的延迟构建模型。Flutter 中使用 ListView 时,如何更有效的设置 Item 项间距呢?看官方文档,可以找到,我们在构建 ListView 时有四种

2020-09-27 19:56:28 12760

原创 Flutter自定义Widget实现自带删除键的TextField

        在项目开发中,我们经常会用到输入框来输入一些信息,Android原生开发时使用的是EditText,在Flutter中则使用的是TextField。使用他们来实现类似选中获取焦点、输入值后显示删除键、清除已输入值等功能,则需要在布局中组合一些别的View(原生)或Widget(Flutter),并在代码中控制相关逻辑。        如果在一个页面中需要用到多个输入框,那么在布局文件以及代码逻辑中都将显得很冗余

2020-08-10 22:42:28 2106 1

原创 深度解析源码 onCreate() 和 onResume() 中获取不到View的宽高值?

首先,提出一个问题,下面三处打印输出的结果是什么呢?带着问题思考一下,然后猜测一下输出结果,之后我们再带着问题去探寻源码;public class MyActivity extends Activity { private static final String TAG = MyActivity.class.getSimpleName(); private Button mButton; @Override public void onCreate(Bundle sa

2020-06-26 21:00:16 1282 1

原创 分析Handler之同步屏障机制与Android的屏幕刷新机制在源码中的应用

说到Handler的消息机制,相信大家谈起这个的时候,多多少少都会有所了解,甚至会说到,还比较熟悉吧!那笔者也自信一把,算是比较熟悉!!!但是笔者在跟踪学习View的invalidate()、requestLayout()方法的源码时,总是会遇到这样一段不甚知晓的代码: @UnsupportedAppUsage void scheduleTraversals() { if (!mTraversalScheduled) { mTraversalSche

2020-06-17 21:19:03 927 1

原创 View的requestLayout()方法的源码分析

首先来看一下requestLayout()方法是做什么的?View#requestLayout(): /** * Call this when something has changed which has invalidated the * layout of this view. This will schedule a layout pass of the view * tree. This should not be called while the view

2020-06-15 02:29:44 785

原创 View的invalidate()方法的源码分析

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2020-06-12 19:29:52 4227 2

原创 统计一个ViewGroup中包含的子View的个数(递归和非递归实现)

编码实现统计一个ViewGroup中锁包含的子View的个数1、首先想到的肯定是递归实现,代码如下: /** * 递归统计一个View的子View数(包含自身) * * @param root * @return */ public int count1(View root) { int viewCount = 0;...

2019-03-20 17:41:46 2494

原创 Android隐藏标题栏ActionBar的几种方式

  Android 3.0 系统之后,Google 引入了 ActionBar 要统一安卓应用的导航栏样式。但是由于 ActionBar 难以定制,在很大程度上制约了开发人员开发与设计的弹性。所以,较为常见的实现方式是:使用ViewGroup来封装一个自己的 HeaderBar。  自2014年 Google I/O 大会上 Material Design 横空出世后,市场上的应用又逐步趋向了...

2018-12-28 17:58:58 2877

原创 Android设备支持的CPU架构

1、目前Android支持的CPU架构有以下几种:类型简介armeabi第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢armeabi-v7a第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能(从2010年起)arm64-v8a第8代,64位,包含AArch32、AArch64两个执行状态对应32、64bitx86...

2018-12-12 16:45:23 3401

原创 Mac查看localhost对应的ip地址

很多时候,我们都输入过这样的网址:http://localhost:8080/很熟悉吧!访问Tomcat或者访问Jenkins等Web网页时经常用到,那么我们经常使用的这个localhost是什么?字面意思是:本地主机,其代表的就是这台计算机。如何才能查看localhost对应的ip地址呢?// 查看 localhost 对应的 ip 地址nslookup localhost下图我们...

2018-12-10 18:58:08 18015 1

原创 Android设置TextView中部分字体颜色和点击事件

  最近接到一个新需求,在一个TextView中实现部分字体的颜色不同于其它字体,且点击该部分文字时实现跳转的功能。一开始想着用多个TextView连起来实现功能,优化代码时再想想,这也太弱智了点儿吧!  果断Google搜索一下别的Coder是怎么实现的,其实Android在TextView中已经为开发者提供了这样的API:/** * This is the class for text ...

2018-10-24 19:32:44 7316 8

原创 Macbook配置一套自己喜欢的高效的开发环境

  俗话说:“工欲善其事必先利其器”,“磨刀不误砍柴工”等等,无不在告诉我们,要做好一件事,准备工作是非常重要的;对我们Coder来说,我们的MacBook Pro或者ThinkPad等等,那就是我们的武器啊!在开发、学习任务前,把我们这件装备配置好就显得尤为重要啦!笔者是Mac,就来配置一下我的武器吧!    1、安装Mac的包管理工具-Homebrew   终端中输入如下命令即可安装(由...

2018-09-12 23:46:21 11008

原创 Android开发屏幕适配方案

  由于Android系统的开放性,任何用户、开发者、硬件厂商和运营商都可以对Android系统和硬件进行定制,修改成他们自己所需要的样子。使得随着Android设备的增多,设备碎片化、系统碎片化、屏幕尺寸碎片化和屏幕碎片化的程度也在不断加深;这种碎片化达到什么程度呢? 1、Android系统碎片化:基于Google原生系统,小米定制的MIUI(米粉一个)、华为定制的EMUI和魅族定制...

2018-09-09 16:32:25 2977

原创 FlowLayout流式布局实现搜索历史或热门标签

  最近项目中有这么一个需求:实现搜索历史记录的展示,默认只展示最近搜索的10条记录,并且最近搜索的首先展示,其余按搜索时的先后顺序依次展示;笔者想到(FlowLayout+SharedPreferences+List+TextView)来实现;   看一下实现的效果图:   笔者想到用FlowLayout流式布局来展示搜索历史(自己实现或者使用开源库),为了实现最近搜索的最先展示,且不展...

2018-05-29 17:29:49 1290 2

原创 安装配置proxyee-down下载工具不限速下载百度网盘的资源文件

  自从国内市场的各大云盘相继关闭服务以来,目前国内基本上只有百度网盘可用了,但是免费用户使用百度网盘下载资源文件时的速度被限制的死死的,除非你开通会员服务,所以导致很多下载工具的应运而生。今天要分享的是一个使用java编写的开源多线程下载工具proxyee-down,虽然稍微有一丢丢地麻烦,但是胜在好用;   proxyee-down是一款免费开源的http下载工具,免封号的百度网盘高速下载利...

2018-04-23 01:51:40 7859

原创 MacOS 下载并安装 Eclipse 所遇到的问题

作为Android研发工程师,闲来了解一下Java8的新特性,学习一下Lambda表达式和Stream等,纸上得来终觉浅,还是要亲手实践多练来加深理解,然发现本本上没有安装Eclipse,下面是楼主我踩过的坑哈! 1、安装Eclipse之前,首先确认你的Mac是否已经安装了JDK,打开终端输入:java -version //查看是否安装了JDK及版本 2、查看已安装JDK版本所对...

2018-03-29 17:23:09 3177

原创 Mac装完Oh My Zsh之后Android Studio 3.0中Terminal 中文显示乱码

  问题:楼主在终端配置完 Oh My Zsh 之后,没有注意中文乱码的问题,之后在Android Studio Terminal 中提交代码时,commit时打字出现中文乱码,才懵逼了!   具体的乱码是啥样的我没有截图,就不贴出来了,下面说一下解决方法吧!   在终端中输入:open ~/.zshrc ,打开 .zshrc 文件,找到下面两行,将第二行的注释打开;    修改前:#...

2018-03-02 15:01:34 2372

原创 AndroidStudio总结:No service of type Factory<LoggingManagerInternal> available in ProjectScopeServices

从Git上拉取完代码,在Android Studio中打开时,出现:Gradle sync failed: No service of type Factory available in ProjectScopeServices.通过查询问题,在Stack Overflow找到解决办法如下: 修改工程目录下的build.gradle文件 修改前:buildscript { re

2018-01-30 14:33:31 733

原创 AndroidStudio中导入本地项目时报错:Gradle sync failed: SSL peer shut down incorrectly

出现这个错误通常是因为Android Studio在download http://services.gradle.org/distributions/gradle-x.x-all.zip的时候,这个网站在国内被墙了,因此我们只好手动下载所需的更新包。当然若是你自己已购买了VPN了,应该不会出现这个问题的;下面是下载地址: http://services.gradle.org/distrib

2018-01-24 01:33:27 11663

原创 Mac中真机测试React Native project时出现Unable to load script from assets 'index.android.bundle'

刚接触学习React Native,在进行真机调试时,报错出现Unable to load script from assets ‘index.android.bundle’. Make sure your bundle is packaged correctly or you’re running a packager server。这里对此做一下记录;笔者对此也查了相关的解决方法,但是并没

2018-01-21 01:59:38 3916 7

原创 Android Studio NDK开发与调试所需配置及其使用

很多人习惯于Eclipse或源码环境下开发JNI应用,但是随着越来越多的Android开发者转战于Android Studio,使用Android Studio作NDK开发将越来越多,下面是笔者查找资料所做的笔记吧!介绍Android Studio中JNI、NDK、CMake、LLDB等;以及如何配置这些组件及使用这些组件进行NDK的开发与调试;

2017-10-19 10:34:23 3919

原创 Android更新UI界面的几种方法的使用

更新UI界面:由于性能要求,Android不能在子线程中访问UI控件,只能在UI线程中更新UI,如果要想在其他线程中更新UI,可以通过以下几种方法更新UI:

2017-10-06 22:21:21 2817 3

原创 Git 的使用及常用命令的使用

Git是什么? Git是目前世界上最先进的分布式版本控制系统 (没有之一);相比于CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统;

2017-09-28 21:54:13 372

Kotlin Android通用框架设计与完整电商APP开发的快速搭建项目服务端说明文档

Kotlin Android通用框架设计与完整电商APP开发,该视频资源的服务端项目快速搭建项目说明文档,看到很多找不到,共享一下;

2018-10-12

GsonFormat.jar 1.5.0

GsonFormat是AndroidStudio中的一个插件,其主要作用是可以快速生成JavaBean,是Json实体类的快速生成插件。

2018-04-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除