自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小时光

行有不得,反求诸己。愿与君共勉。

  • 博客(69)
  • 收藏
  • 关注

原创 数据结构(一)数组

概述说起数组我们都不陌生,几乎在每一种编程语言中,基本上都会有数组这种数据类型。不仅如此它还是是最基础最简单的数据结构。尽管如此,可能还是有一些人并没有真正的理解这个基础数据结构的精髓所在。首先,我们都知道,在java中数组是从 0 开始编号的,但是为什么数组要从 0 开始编号,而不是从 1 开始呢?从 1 开始不是更加的符合人类的思维方式吗?定义数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。首先,定义中有几个关键词,需要我们关注一下。理解

2021-09-09 21:57:50 470 1

原创 算法基础:复杂度分析(下)浅析最好、最坏、平均、均摊时间复杂度

算法基础:复杂度分析(上)如何分析、统计算法的执行效率和资源消耗在时间复杂度分析中,还有四个概念也是需要了解的。它们分别是:最好情况时间复杂度(best case time complexity)、最坏情况时间复杂度(worst cast time complexity)、平均情况时间复杂度(average cast time complexity)和 均摊时间复杂度(amortized time complexity)。最好、最坏情况时间复杂度下面看一段代码,我们分别从最好和最坏的情况下去分析

2021-09-04 20:12:29 998

原创 算法基础:复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

前言我们都知道,数据结构和算法本身解决的是 “快” 和 “省” 的问题,即如何让代码运行得更快,如何让代码更生存储空间。所以,执行效率是算法一个非常重要的考量指标。那如何来衡量我们编写的算法代码的执行效率呢?那就是时间、空间复杂度分析。为什么需要复杂度分析?我们知道在算法中有一种事后统计法,这种方法就是将代码执行一遍,通过统计、监控等方式就能得到算法执行时间和占用空间的内存大小。但是这种时候统计方法有非常大的局限性。1. 测试结果非常依赖测试环境同样的代码在Intel Core i9处理

2021-08-28 22:05:07 509

原创 LeetCode刷题之数组篇(二)三数之和

题目描述:给你一个包含 n 个整数的数组 nums ,判断 nums 中是否存在三个元素 a,b,c,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例1:输入: nums = [-1, 0, 1, 2, -1, -4];输出:[[-1, -1, 2],[-1, 0, 1]]这道题 “不重复”是一个切入点。正如官方给的题解中提到的,在最坏的情况下,数组中的元素全部为0,如果此时我们还继续使用三重循环来遍历所有的数组。会得到

2021-08-12 22:46:05 225

原创 LeetCode刷题之数组篇(一)两数之和

题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。实例1:输入:nums = [2, 7, 11, 15],target = 9输出:[0, 1]解释:因为 nums[0] + nums[1] == 9,返回 [0, 1]。这个题目还是比较简单的,一般的我们都能想到使用两层 for .

2021-08-11 22:04:54 176

原创 Android 11.0 ActivityManagerService的启动流程

首先推荐一篇文章,ActivityManagerService-AMS启动流程-[Android取经之路]。这篇文章是以Android 10.0源码为基础分析的,写的很详细也很棒,我学习AMS的启动就是看着这篇文章学的,在此先感谢作者的分享。我们都知道,AMS非常重要,关乎着四大组件的启动,同时它也非常非常复杂,如果不是做系统定制开发的想把AMS彻底搞清楚那真的是非常困难的一项巨艰巨的任务。同时,即便是做系统定制开发的人,甚至是Google的开发者也不一定能完全搞清楚。因...

2021-07-31 22:42:28 637

原创 Java中取模与取余

概述通常取模运算也叫取余运算,它们返回的结果都是余数。rem(取余)和mod(取模)唯一的区别在于:当X和Y的正负号一样的时候,两个函数结果是等同的;当X和Y的符号不同时,rem(取余)函数的结果的符号和X的符号一样,而mod(取模)函数的结果符号和Y的符号一样。这是由于这两个函数的生成机制不同,rem函数采用fix函数,而mod函数采用了floor函数(这两个函数是用来取整的,fix函数向0方向舍入,floor函数向无穷小的方向舍入)。rem(x, y)函数返回的是x-n.*y,如果y不等于0,其

2021-07-13 21:43:56 3784

原创 Android 11.0 PackageManagerService(三)APK的安装过程

一. APK的安装步骤安装步骤一:把APK的信息通过IO流的形式写入到PackageInstaller.Session中安装步骤二:调用PackageInstaller.Session的commit方法,把APK的信息交给PackageManagerService处理安装步骤三:进行Apk的Copy操作,进行安装二. 点击安装后到完成APK的拷贝流程如下:点击一个未安装的apk后,会弹出安装界面,点击确定按钮后,会进入PacakageInstallerActivity.java的bi

2021-07-06 21:32:09 4229 8

转载 面试官:准备用HashMap存1w条数据,构造时传10000还会触发扩容吗?

// 预计存入 1w 条数据,初始化赋值 10000,避免 resize。HashMap<String,String> map = new HashMap<>(10000)// for (int i = 0; i < 10000; i++)Java 集合的扩容HashMap 算是我们最常用的集合之一,虽然对于 Android 开发者,Google 官方推荐了更省内存的 SparseArray 和 ArrayMap,但是 HashMap 依然是最常用的...

2021-06-16 13:44:00 742

原创 Android 11.0 PackageManagerService(二)APK扫描过程

PackageManagerService的构造函数中调用了scanDirTracedLI方法来扫描某个目录的apk文件。1. 扫描路径在Android 10.0中,PKMS主要扫描以下路径的APK信息:/vendor/overlay/product/overlay/product_services/overlay/odm/overlay/oem/overlay/system/framework/system/priv-app/system/app/vendor/priv-ap

2021-06-15 22:56:44 3362 11

原创 Android 11.0 PackageManagerService(一)工作原理和启动流程

1. 概述 PackageManagerService是Android系统核心服务之一,也是Android中最常用的服务之一。它主要负责的工作如下: 1. 解析AndroidManifest.xml文件,解析清单文件中的所有节点信息。 2. 扫描.apk文件,安装系统应用,本地应用等。 3. 管理本地应用,主要有:安装、卸载、应用信息查询等。2. 核心源码/frameworks/base/core/java/android/app/ApplicationP...

2021-03-30 22:40:34 5539 2

原创 Android 锁屏状态下启动应用很慢的原因分析

最近在工作中遇到一个需求就是,在锁屏状态下直接拨打电话,功能实现之后测试给的反馈是操作之后到电话拨出的时间太长(大概5秒)。希望能优化一下。后来经过分析确定不是应用层的问题。然后就一顿百度、Google,发现了一篇文章专门在分析这个问题。我也是看了人家写的才准备照着这篇文章的思路分析一下源码。首先声明一下,我写的这篇文章是为了记录此问题分析的一个过程,其源码是基于Android 11(Api 30)。话不多说,现在开始。。。拨打电话启动的action为android.intent.action.CA

2021-03-12 16:20:54 3373

原创 Android ConfigChanges属性简介

我们知道在运行时发生配置变更时,默认情况下会关闭Activity并将其重启,但是使用该属性声明配置将阻止Activity重启。相反,Activity会保持运行状态,并且系统会调用其onConfigurationChanged()方法。任何或所有下列字符串均是该属性的有效值。若有多个值,则使用 "|" 进行分隔,例如:"locale|navigation|orientation"。值 描述 "density" 显示密度发生变更 - 用户可能已指定不同的显示比例,或者有不同的显示现处

2021-03-01 11:05:15 2325 6

转载 Https单向和双向认证过程

一、HttpHyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准。HTTP协议传...

2020-07-08 09:57:21 523

原创 TCP的基础知识

TCP/IP的分层管理TCP/IP协议族里最重要的一点就是分层。TCP/IP协议族按层次分别分为以下4层:应用层、传输层、网络层和数据链路层。把TCP/IP层次化是有好处的。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须要把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。值得一提的是,层次化之后,设计也变得相对简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方、对方的

2020-06-17 21:31:24 701

原创 从源码分析RecyclerView的回收和复用机制

从RecyclerView的名字就可以看出,它的主要作用就是对View的回收。相比较ListView它的优势是它本身不需要关心视图的问题,它不需要关心如何将子View放在合适的位置,不需要关心如何分割这些子View,更不用关心这些子View的外观。它要做的仅仅是回收和复用的工作。现在我们就来看一下如此优秀强大的RecyclerView它负责的工作都是怎样展开的。在开始之前先来看一下关于RecyclerView的灵魂三问,带着这三个问题去源码中找答案,这样可以更好的理解源码,理解它的工作流程。问题一:

2020-05-23 23:39:00 946

原创 从源码的角度分析Handler

对于Java开发人员来说多线程和线程间通信是非常重要也是必须要掌握的不可或缺的知识。Android是基于Java语言进行开发的,所以对于Android开发者而言多线程和线程间通信也同样显得极其重要,但是作为Android开发者在开发过程中好像并没有经常的深层次的接触多线程和线程池。这是因为在Android中线程间通信这一重要的知识点已经被Google开发者封装到了Handler中,Handler已...

2020-05-09 21:31:20 322

原创 Android Service的绑定过程

本文是《Android进阶解密》一书的读书笔记。书中描述的更加详细再结合其他章节的内容可以更加系统的了解这一部分的内容,所以大家可以移步书本。Service的绑定过程分为两个部分,分别是ContextImpl到AMS的调用过程和Service的绑定过程。在开始学习之前,先将几个相关的类介绍一下。ServiceRecord:跟ActivityRecord功能类似,ActivityRecord用来描述一个Activity,相应的ServiceRecord就是用来描述一个Service。Proce

2020-04-22 21:37:28 793

原创 Android Service的启动过程

本文是《Android进阶解密》的读书笔记。所以,可能不会为大家提供多少帮助,我写本文的目的只是为了自己再学习的时候能够有个印象,为自己提供一个方便。Service的启动过程分为两个部分,分别是ContextImpl到ActivityManagerService的调用过程和ActivityThread启动Service的过程。一、ContextImpl到ActivityManagerService的调用过程我们在Activity中启动Service首先调用startService方法,它在Con

2020-04-19 21:40:14 667

原创 Android根Activity的启动过程

本文是《Android进阶解密》一书的读书笔记。所以,大家可以直接去买书看看。现在开始记录根Activity的启动过程。该过程很复杂,讲述的是从手机开机进入桌面之后,点击屏幕上App的应用图标开始,直到App启动后显示的第一个应用程序Activity的过程。可以分为三个部分,分别是Launcher请求AMS的过程,AMS到ApplicationThread的调用过程和ActivityThread启动Activity的过程。一、Launcher请求AMS的过程1. 点击应用图标会调用Launche

2020-04-18 19:52:08 377

原创 ViewPager+Fragment懒加载自我救赎之路

对于ViewPager+Fragment的组合使用,想必所有的Android开发者都不会陌生吧。它在Android开发中是非常常用的,其重要性不言而喻。但是这个组合的常规使用是存在问题的,今天就和大家分享一下我在使用ViewPager+Fragment的过程中遇到的问题,并分析其中的原因,以及解决方案。现在开始我们的自我救赎之路吧。首先罗列出ViewPager+Fragment组合使用过程中遇...

2020-03-24 21:42:28 554

原创 Android View的工作流程分析学习

一、View工作的三个流程View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局和绘制。其中:measure:测量。系统会先根据xml布局文件和代码中对控件属性的设置,来获取或者计算出每个View或者ViewGroup的尺寸,并将这些尺寸保存起来。layout:布局。根据测量出的结果以及对应的参数,来确定每一个控件应该显示的位置。draw:绘制...

2020-02-29 22:25:23 247

原创 Android由滑动冲突看事件分发

在进入正题之前我们先啰嗦点别的东西。想必大家都做过对一个Button同时做Click和Touch事件的监听处理吧,里边出现的情况估计大家也是不陌生的。可是里边的原理至少我没有去看源码弄清楚过,现在我就带着以下问题去源码中找找答案了。问题一:为什么只有View的Touch事件的监听中return false时View的Click事件监听才能得到执行?问题二:View的Click事件到底是什么...

2020-02-06 23:50:29 198

原创 总结一波Java的位运算符

一般来说位运算符只能操作整数类型的 变量或者值。Java支持的位运算符有以下7个。● &:按位与。当两位同时 为1时才返回1。● | :按位或。只要有一位为1即可返回1。● ~ :按位非。单目运算符,将操作数的每个位(包括符号位)全部取反。● ^ :按位异或。当两位相同时返回0,不同时返回1。● << :左移运算符。● >> :右移运...

2019-11-27 22:28:36 503

原创 UML(统一建模语言)扫盲篇

一. UML概述 UML(Unified Modeling Language,统一建模语言)是当前面向对象软件系统建模的标准语言,它融合了众多软件建模技术的优点,通过一系列标准的图形符号来描述系统。 UML是一个通用的可视化建模语言,不同于编程语言,它通过一些标准的图形符号和文字对系统进行建模,用于对软件进行描述、可视化处理、构造和建立软件系统制...

2019-09-02 22:24:46 2023

原创 java多线程学习三(线程间的共享和协作)

目录 ● yield()和join()方法简介 ● 线程间的共享 ● 线程间的协作yield()和join()方法简介 yield()方法:使当前线程让出CPU占有权(线程让步),但让出的时间是不可设定的。也不会释放锁资源,所有执行yield()的线程有可能在进入到可执行状态后马上又被执行。...

2019-04-18 14:32:11 430

原创 java多线程学习二(线程的启动和终止)

因为我是在学习java多线程相关的知识所以写的文章也是由浅入深比较没有深度,这一篇是线程相关比较基础的使用,大神勿喷,请绕行。目录 ● 线程的三种创建方式 ● 如何安全的终止线程 ● 深入理解run()和start() ● 线程各种状态切换线程的三种新建方式一...

2019-04-15 17:51:00 397 1

原创 java多线程学习(一)

目录: • 基础概念 • CPU时间片轮转机制 • 什么是进程和线程 • 澄清并行和并发 • 高并发编程的意义好处和注意事项基础概念:CPU核心数和线程数的关系: 多核心:也指单芯片多处理器)(Chip Multiprocessors,简称CMP),...

2019-04-15 15:11:44 204

转载 Android图片压缩并上传到服务器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yrmao9893/article/details/70599061 &lt;/div&gt; &lt;link rel="stylesheet"...

2019-01-21 09:36:23 594

原创 Android-Binder及AIDL基础分析

Android-Binder运行机制总结Binder是Android中的一个类,它实现了IBinder接口。从IPC角度来说,Binder是Android中的一种跨进程通信方式。从Android FrameWork角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager等等)和相应ManagerService的桥梁;...

2018-11-21 15:27:17 321 1

原创 设计模式之观察者模式(Observerable Pattern)

1.介绍1.1 定义观察者模式:观察者模式又叫发布-订阅(Publish/Subscribe)模式。定义对象间一种一对多的依赖关系,每一个对象改变状态时,则所有依赖于它的对象都会得到通知并被自动更新。1.2 作用使用观察者模式可以很好的解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。2. 模式原理2.1 UML结构类图...

2018-11-07 16:28:08 843

原创 设计模式之工厂方法模式(Factory method)

前言在前一篇文章提到的设计模式之简单工厂模式,简单工厂模式存在的一些问题:•   工厂类集中了所有实例(产品)的创建逻辑,一旦这个工厂不能正常工作,整个系统都会受到影响;•   违背“开放 - 关闭原则”,一旦添加新产品就不得不修改工厂类的逻辑,这样就会造成工厂逻辑过于复杂。•   简单工厂模式由于使用了静态工厂方法,静态方法不能被继承和重写,会造成工厂角色无法形成基于继承的等级结...

2018-11-04 10:56:16 278

原创 设计模式之策略模式(Strategy Pattern)

1.介绍1.1 定义定义了一系列算法,分别封装起来,使他们之间可以互相替换,让算法可在不影响客户端的情况下发生变化。简单说:准备一组算法,将每一个算法封装起来,让外部按照需要调用使得算法可以互换。 1.2 作用•   减少了各种算法类与使用算法类之间的耦合(客户端方便根据不同的需要来解决不同的问题)•   算法可独立于外部使用者而变化2. 模式原理2.1策略模式...

2018-11-03 15:46:24 257

原创 设计模式之简单工厂模式(SimpleFactoryPattern)

1.定义      •  简单工厂模式属于创建型模式,又叫作静态工厂方法模式,这是由一个工厂对象决定创建出哪一种产品类的实例。      • 现实生活中,工厂是负责生产产品的;同样在设计模式中,简单工厂模式我们可以理解为负责生产对象的一个类,称为“工厂类”。2.模式原理      2.1 模式组成  组成(角色) 关系 作用...

2018-11-01 22:35:24 320

转载 android 适配工具(ScreenMatch插件)的使用

最新最全文章(2018-08-25):https://blog.csdn.net/fesdgasdgasdg/article/details/82054971dp方式屏幕适配原理请看:http://blog.csdn.net/fesdgasdgasdg/article/details/52325590&n...

2018-10-09 14:26:24 4635

转载 android中线程池的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l540675759/article/details/62230562 本文出自博客Vander丶CSDN博客,如需转载请标明出处,尊重原创谢谢博客地址:http:/...

2018-09-28 15:53:29 315

转载 android多线程下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l540675759/article/details/62111148 本文出自博客Vander丶CSDN博客,如需转载请标明出处,尊重原创谢谢博客地址:http:/...

2018-09-28 15:50:37 1555

原创 Android 点赞人员点击事件

这就是我们要实现的效果,首先我要给大家介绍一个github上的项目,https://github.com/nimengbo/TextViewSpanClickable 此项目就是实现的该效果,在此我只是做一下使用的介绍/** * Created by Abner on 15/6/17. * QQ 230877476 * Email nimengbo@gmail.com * 另...

2018-08-11 18:10:10 444

原创 App启动页倒计时圆形并且跳过功能实现

老规矩先上效果图:这就是我们要实现的效果,现在我们看代码public class CountDownView extends View { //圆轮颜色 private int mRingColor; //圆轮宽度 private float mRingWidth; //圆轮进度值文本大小 private int mRingProge...

2018-07-19 14:56:42 3084 8

原创 android 4.4报错java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvi

在android studio3.0 android 4.4.4 api 19下运行一直报错如下:java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "an...

2018-07-13 10:09:01 6960 3

空空如也

空空如也

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

TA关注的人

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