自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(127)
  • 资源 (10)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android知识体系总结

1. UI自定义ViewView基础measurelayoutdrawPath类Canvas类android事件分发机制

2019-05-06 21:06:32 449 1

原创 room数据库升级

val songId: String,//歌曲idval songName: String,//歌曲名称val songType: Int,//歌曲类型:1:歌曲 2:听书。

2024-03-09 17:20:40 1199 1

原创 LruCache

官方描述LruCache是存储了优先数量的强引用缓存,每次访问一个值的时候,会将其移动到队列的头部,当一个值添加到已经满的队列的时候,会将队列尾部的元素移除掉,让GC回收。如果缓存的值明确的要知道已经释放,需要重写entryRemoved(boolean ,K,V,V)方法,做一些自己的处理。如果在缓存中没有找到一个对应的值,可以通过create(K),简化了调用代码,允许即使是没有找到对应值的情况下能够返回一个值。上面的最主要的就是设置maxSize以及内部的定义的允许访问排序的LinkedH

2022-12-08 11:34:12 194 1

原创 TreeMap

之前已经学习过HashMap和LinkedHashMap了,HashMap不保证数据有序,LinkedHashMap保证数据可以保持插入顺序,而如果我们希望Map可以保持key的大小顺序的时候,我们就需要利用TreeMap了。其大致的结构如下所示:使用红黑树的好处是能够使得树具有不错的平衡性,这样操作的速度就可以达到log(n)的水平了。如果存在的话,old value被替换;如果不存在的话,则新添一个节点,然后对做红黑树的平衡操作。get函数get函数则相对来说比较简单,以log(n)的复杂度进

2022-12-07 17:01:13 187

转载 LinkedHashMap

前面对 HashMap 的源码做了分析,我们知道 HashMap 内部的数据结构是数组+单链表/红黑树实现的,这种数据结构是不能保证数据插入的有序性的,因为会对传入的 key 做 hash 运算,通过链表指向的方法去存储数据,这样就导致了遍历数据的时候无法根据我们存入的顺序来读取。先看下继承结构:可以看到LinkedHashMap继承于HashMap,他继承了HashMap的方法和特性,比如内部的默认初始容量、默认负载因子、扩容机制等。但是LinkedHashMap在此基础上又进行了扩展,主要提供了元

2022-12-07 16:27:55 1219

原创 HashMap

HashMap的继承广西相对比较简单,继承于AbstractMap实现了Map接口、Cloneable接口、Serializable接口。HashMap是基于哈希表的实现了Map接口,这个实现提供了所有可选的map操作。并且允许键值对均为null。HashMap的一些特点:当我们执行下面的操作:运行结果:下面看下大致的结构,2.2 构造方法在第四个构造方法里面调用了putMapEntries():这里看到了新方法:hash()和putVal(),会在后面发放中记录,先讲下主流程。前面讲了

2022-12-06 23:45:29 254

原创 LinkedList

可以先看下官方Api对LinkedList的介绍从图中可以看出,LinkedList实现的接口有:先看下LInkedList的特点,对LinkedList有 一个大体的认识:前面讲了,LinkedList是基于双向链表实现的,所以属性也很简单,定义了大小、头结点和尾结点。看下每个节点的结构:很明显的双向链表的结构。构造方法很简单,没有什么特别的操作 。不指定插入元素的下标(默认插入尾部)在指定位置添加先检查是否在可插入的范围内,不在则抛出异常,如果index和当前size相等,则直接插入到

2022-12-05 23:35:14 162

原创 ArrayList源码阅读笔记

1. 基础知识1.1 概念ArrayList是可以动态增长和缩减的索引序列,它是基于数组实现的List类。该类封装了一个动态再分配的Object[]数组,每个对象都有一个capacity属性,表示它们所封装的Object[]数组长度,当向ArrayList中添加元素时,该属性会自动增加。如果向ArrayList中添加大量元素,可使用ensureCapacity()方法一次性增加capacity,可以减少增加重分配的次数提高性能。ArrayList的用法和Vector相似,但Vector是一个

2022-12-03 14:39:14 142

原创 Android打包流程

这个资源索引 标在给定资源ID和设备配置信息的情况下,能够在应用程序的资源目录中快速地找到最匹配的资源。因为在项目中会依赖不同的库、组件,也会有多渠道的需求,所以merge这一步操作就是将不同地方的资源文件进行整合,多个manifest文件需要整理成一个完整的文件,所以如果有属性冲突这一步就会报错。所有没有编译的资源,如images、assets目录下资源(该类文件是一些原始文件,App打包时并不会对其进行编译,而是直接打包到apk中,对于 这一类资源文件的访问,应用层代码需要通过文件名对其进行访问)。

2022-10-25 00:49:25 4644

转载 Kotlin协程

使用协程已经有较长的时间了,但一直停留在launch、async启动协程,suspend方法挂起的阶段。这段时间系统梳理Kotlin知识时才发现,对协程(仅对Kotlin)还有很多概念不甚了解。例如CoroutineScope对协程生命周期的重要性、协程父子结构的作用、结构化并发、一些Kotlin协程中约定俗称的规定等。一、什么是协程我们尝试从几个比较流行的说法来解释协程到底是个什么东西,而不是再增加一种让人猜不透的说法协程是轻量级线程(官方表述)可以换个说法,协程就是方法调用封装成类线程的AP

2022-04-02 14:33:59 7375

原创 Git工作区介绍

一、基本概念1. 四个工作区域Git 有四个工作区域:工作区域(Working Directory)、暂存区(Stage\Index)、本地仓库(Repository)、远程仓库(Remote Directory)

2021-07-28 00:39:05 2423 1

原创 Android 渲染机制

Android 渲染机制应用程序的帧率是多少呢?我们的目标是,让应用程序在其整个生命周期中,始终保持60FPS的帧速率。这意味着要在一秒内刷新60次,也就是每16.6667毫秒刷新一次。Android 系统每隔16ms发出VSYNC信号,触发对UI进行渲染,那么整个过程如何保证在16ms内就能达到一个流畅的画面。屏幕撕裂和垂直同步关于刷新,主要有两方面需要考虑:帧速率: 指的是设备的GPU每秒能为整个屏幕绘制多少帧。我们的目标是维持Android设备的标准。刷新率: 指的是屏幕在一秒内更新的

2020-11-14 17:41:00 418

原创 android sutido连接不上真机

问题一 :无驱动步骤一:下载usb driver打开Android studio ——>tools——>sdk manager——>sdk tools选择Google usb driver 点击apply进行下载步骤二配置usb driver将你的手机用数据线连接电脑右击此电脑——>属性——>设备管理器——>便携设备右击你的手机——>更新驱动程序——>浏览我的计算机以查找驱动程序软件选择刚才下载的usb driver 的下载路径,一般

2020-11-07 22:25:22 163

原创 2020第三季度OKR

O1:完成UI优化总结工具使用总结优化点总结O2:埋点可视化完成埋点查询系统(后台+前端)app查看当前页面埋点O3:埋点一致性研究O4:flutter学习2020.10.20

2020-10-20 00:13:10 331

原创 LeetCode_1411给 N x 3 网格图涂色的方案数

你有一个 n x 3 的网格图 grid ,你需要用 红,黄,绿 三种颜色之一给每一个格子上色,且确保相邻格子颜色不同(也就是有相同水平边或者垂直边的格子颜色不同)。给你网格图的行数 n 。请你返回给 grid 涂色的方案数。由于答案可能会非常大,请你返回答案对 10^9 + 7 取余的结果。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-ways-to-paint-n-x-3-grid著作权归领扣网络所有。商业转载请联系官

2020-10-19 21:37:27 648

原创 LeetCode_215数组中第K个最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。解法1:选择排序class Solution { public int findKthLargest(int[] nums, int k

2020-10-12 10:44:12 124

原创 Django初级使用总结

一、简介Django是一个可以使Web开发工作愉快并且高效的Web开发框架。使用Django,使你能够以最小的代价构建和维护高质量的Web应用。Django是一个遵循MVC设计模式的框架。MVC是Model、View、Controller三个单词的简写,分别代码模型、视图、控制器。Django其实也是一个MTV的设计模式。MTV是Model、Template、View三个单词的缩写,分别代表模型、模板、视图。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以Django里更关注的是模型(

2020-10-12 10:23:02 262 2

原创 LeetCode_16.22兰顿蚂蚁

16.22. 兰顿蚂蚁一只蚂蚁坐在由白色和黑色方格构成的无限网格上。开始时,网格全白,蚂蚁面向右侧。每行走一步,蚂蚁执行以下操作。如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并向前移动一个单位。如果在黑色方格上,则翻转方格的颜色,向左(逆时针方向)转 90 度,并向前移动一个单位。编写程序来模拟蚂蚁执行的前 K 个动作,并返回最终的网格。网格由数组表示,每个元素是一个字符串,代表网格中的一行,黑色方格由 ‘X’ 表示,白色方格由 ‘_’&nbs

2020-09-22 15:08:59 561

原创 LeetCode_1304和为零的N个唯一整数

题目给你一个整数n,请你返回任意一个由n个不相同的整数组成的数组,并且这n个数相加和为0。示例1:输入: n=5输出:[-7,-1,1,3,4]解释: 这些数组也是正确的 [-5,-1,1,2,3],[-3,-1,2,-2,4]。提示:1<=n<=1000方法1:class Solution { public int[] sumZero(int n) { int[] result = new int[n]; for (int i = 1; i

2020-09-22 15:06:02 138

原创 productFlavors创建不同产品

前言:因为当前产品运营策略发生变化,需要把产品给当地运营商运营,所以就需要把App的名称和icon进行定制化改变,并且需要在app接口中增加运营商包的特定channelCode。因为要修改app的名称和icon所以不能够使用pick...

2020-09-06 17:27:00 1020 1

原创 Bound services

一、基础知识绑定服务是Service类的实现,可让其它应用与其进行绑定和交互。如要为服务提供绑定,必须实现onBind()回调方法。该方法会返回IBinder对象,该对象定义的编程接口可供客户端用来与服务进行交互。二、创建绑定服务创建提供绑定的服务时,必须提供IBinder,进而提供编程接口,以便客户端使用此接口与服务进行交互。可以通过三种方法定义接口:扩展Binder类如果服务是提供给自己应用专用,并且在与客户端相同的进程中运行(常见情况),则应通过扩展Binder类并从onBind()返回该

2020-08-23 15:10:18 169

原创 Service基础知识

一、简介Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。Service可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到 Service 与之进行交互,甚至执行进程间通信(IPC)。例如,服务可在后台处理网络事物、播放音乐,执行文件I/O或内容提供程序进行交互。以下三种不同的服务类型:Foreground前台服务执行一些用户能注意到的操作。例如,音频应用汇使用前台服务来播放音频曲目。前台服务必须显示通知。即使用户停止与应用的交

2020-08-19 11:09:05 1445

原创 LeetCode43_字符串相乘

class Solution { public String multiply(String num1, String num2) { if (num1.startsWith("0") || num2.startsWith("0")) { return "0"; } int len1 = num1.length(); int len2 = num2.length(); int temp = 0; int result[] = new int[len1 + .

2020-08-15 18:13:03 104

原创 Fragment与Activity、Fragment相互交互

一、分类1 Activity 与 Fragment 之间通信Activity 传递数据到 FragmentFragment 传递数据到 Activity2 Fragment 与 Fragment 之间通信二、Activity 与 Fragment 之间通信2.1、Activity 如何传递数据到 Fragment方法1使用Fragment.setArguments(bundle),把bundle设置到fragment ,在Fragment中onCreateView()中取出。在Ac

2020-08-09 17:02:39 759

原创 Fragment生命周期

一、定义Activity 界面中的一部分,可理解为模块化的ActivityFragment 不能独立存在,必须嵌入到Activity中Fragment 具有自己的生命周期,接收它自己的事件,并可以在Activity进行时被添加或删除Fragment 的生命周期直接接收所在Activity的影响。如:当Activity 暂停时,它拥有的所有Fragment都暂停二、生命周期...

2020-07-26 15:30:27 176

原创 Fragment的创建和使用

一、Fragment添加至Activity由于 Fragment 作为 Activity 一部分,所以 Fragment 的使用一般是添加到Activity 中将 Fragment 添加到 Activity 中一般有2种方法:在 Activity 的 layout.xml 布局文件中静态添加在 Activity 的 .java 文件中动态添加方法 1:在 Activity 的 layout.xml 布局中静态添加Fragment 的布局文件fragment_test.xml<L

2020-07-26 15:07:20 1593

原创 TextView富文本

一、富文本介绍TextView 富文本显示主要有两种方式:SpannableString 类html下面介绍这两种方式实现二、SpannableString 类作用:修改字体( StyleSpan )[粗体、斜体等]文本字体( TypefaceSpan )修改文字颜色( ForegroundColorSpan )文字绝对大小( AbsoluteSizeSpan )文字相对大小( RelativeSizeSpan )图片( ImageSpan )设置图片( DynamicDra

2020-07-19 01:56:26 2057

原创 任务与返回堆栈

任务是用户在执行某项工作时与之互动的一系列Activity的集合。这些Activity 按照每个Activity 打开顺序排列在一个返回堆栈中。大多数任务都从设备主屏幕上启动。当用户轻触应用启动器中的图标(或主屏幕上的快捷方式)时,该应用的任务就会转到前台运行,如果该应用没有任务存在(应该最近没有使用过),则会创建一个新的任务,并且该应用的“主”Activity将会作为堆栈的根Activity打开。在当前Activity启动另一个Activity时,新的Activity将被推送到堆栈顶部并获得焦点。上一

2020-07-12 14:18:40 231

原创 Android属性动画

本文章源码属性动画特点:作用对象不只是View对象,甚至没有对象也可以。动画效果不只是4中基本变换,还有其他动画效果。作用领域:API11 后引入。工作原理在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。从上述工作原理可以看出属性动画有两个非常重要的类:ValueAnimator类和ObjectAnimator类。一、ValueAnimator类通过不断控制 值 的变化,再不断 手动 赋给对象的属性,从而实现动画效果

2020-06-30 20:11:31 189

原创 从单例模式窥探类初始化过程中的同步处理机制

在Java多线程中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销。双重检查锁定是常见的延迟初始化技术。但它是一个错误的用法。本文将分析双重检查锁定的错误根源,以及两种线程安全的延迟初始化方案。一、 双重检查锁定的由来下面代码是单例模式中比较常见的写法(错误的、不安全):public class UnsafeLazyInitialization { private static UnsafeLazyInitialization instance; public stat

2020-06-21 02:09:26 336

原创 Intent和Intent过滤器

1.概览Intent是一个消息传递对象。可以用来从其它应用组件请求操作。Intent 可以通过多种方式进行组件之间的通信,但其基本用处主要包括以下三个:启动Activity将Intent传递给startActivity(),可以启动新的Activity实例。Intent用于描述要启动的Activity,并携带任何必要的数据。如果希望在Activity完成后收到结果,可以调用startActivityForResult(),在Activity的onActivityReuslt()回调中接收。启动

2020-06-14 18:52:06 347

原创 Activity 状态更改

前言用户触发和系统触发的不同事件会导致Activity从一个状态转换到另一个状态。本文主要介绍发上此类转换的一些常见情况,以及如何处理这些转换。在交接本文之前需要知道Activity状态的情况,可以查看上一篇文章 《Activity生命周期》配置发生了更改有很多事件会触发配置更改。最显著的例子就是横竖屏之间的切换。其他情况,如语言或输入设备的改变等,也可能导致配置更改。当配置发生更改时,Activity会销毁并重新创建。原始Activity实例将触发onPause()、onStop.

2020-06-01 20:09:21 650 1

原创 LeetCode_两数之和

题目来源:力扣(LeetCode)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]第一版(简单、直接):两层循环(与上学时输出乘法口诀算法类似) class Solutio

2020-05-25 00:42:47 353

原创 Activity生命周期

       在生命周期回调方法中,可以声明用户离开和再次进入Activity时Activity的行为方法。例如,如果正在视频播放,当用户切换至另一应用时,你的应用可能要暂时停止视频并终止网络连接,当用户返回时,你可以重新连接到网络,并允许用户从同一位置播放视频。换言之,每个回调都支持你执行适合给定状态变更的特定操作,在合适的时间执行正确的操作,并妥善处理转换,这将提升应用的稳健性和性能。一、Actitvity生命周期概念 

2020-05-24 01:11:54 1969

原创 2020第二季度OKR

第一版 (2020.2.17)O1: 提高测试团队对客户端的认可KR1-1:保证相关测试人员了解关键功能实现KR1-2:每个版本提测后修改大的实现逻辑数次<=1KR1-3:Android/Ios两端新增功能实现一致(技术可实现前提下)KR1-4:bug总数减少30%KR1-5:bug 24h内修改完成O2 :高效工作KR2-1:各种评审、会议在计划时间完成KR2-2:制定日常工作规范,并严格遵守KR2-3:按时提测O3:加强View的理解KR3-1:完成.

2020-05-17 19:39:12 556

原创 5.9.0总结

分享人:沈永辉时    间:2020.5.15问题:xml 布局层级(尽量减少布局层级、尽量使用RelativeLayout)修改前<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> <LinearLayout android:orientat.

2020-05-15 17:19:05 163

原创 Android视图动画(补间动画| 逐帧动画)

视图动画

2020-04-19 23:47:57 342 1

原创 android动画分类及概括

1. 概括

2020-04-09 21:49:58 320

原创 support-annotations @IntDef的使用(替代枚举)

1. 枚举利弊以及枚举倒底占多少内存注:此部分内容转自Android是否推荐使用枚举(enum)?使用枚举的利弊以及枚举倒底占多少内存? 在此感谢分享1.1 安卓中是否推荐使用枚举enumAndroid 官方建议:Android官网不建议使用enums,占用内存多(Enums often require more than twice as much memory as stati...

2020-04-05 03:26:08 232

原创 android异常整理

NullPointerException 空指针异常IllegalArgumentException 参数不合法异常UnsupportedOperationException 功能不支持异常

2020-04-03 15:00:33 166

api-ms-win-crt-private-l1-1-0.zip

api-ms-win-crt-private-l1-1-0.dll 下载后解压复制该文件到命令执行目录即可

2020-11-07

设计模式demo

设计模式domo代码,https://blog.csdn.net/xyzso1z/article/category/8232526

2019-02-28

WebView与Android交互

webView与Android交互的几种方式讲解

2018-12-01

中介者模式

中介者模式 《Android源码设计模式解析与实战》金合欢花或或

2018-10-21

访问者模式

https://blog.csdn.net/xyzso1z/article/details/83115710文章地址

2018-10-18

模板方法Demo

模板方法Demo ,取自《Android源码设计模式解析与实战 15章》

2018-10-17

EasyX_2014冬至版

头文件graphics.h,可以用画图

2017-06-24

java语言模拟数据库增删查改排序(源代码+课程报告)

数据库中有“表”的概念。“表”由若干“行”组成,每“行”由许多“列”组成。一般的数据库都提供了对SQL的支持。 我们可以模拟一个最简单版的SQL,只能实现简单的排序,简单的选择条件,列的显示顺序等功能。

2017-06-24

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

TA关注的人

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