![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
文章平均质量分 82
WayneSun729
这个作者很懒,什么都没留下…
展开
-
【Android View】requestLayout、invalidate与postInvalidate
上来先说结论,一言以蔽之:requestLayout方法会导致View的onMeasure、onLayout、onDraw方法被调用;invalidate方法则只会导致View的onDraw方法被调用具体原理可见文章末尾的这几篇博客,说的已经非常详细,这里只对要点进行记录。相似点都采用了逐层上报的思想区别requestLayout()子View调用requestLayout方法,会标记当前View及父容器,同时逐层向上提交,直到ViewRootImpl处理该事件,ViewRootImpl会原创 2022-02-10 15:09:54 · 1615 阅读 · 0 评论 -
Android Gradle 高级自定义
Android Gradle 自定义配置原创 2021-12-26 21:35:38 · 1453 阅读 · 0 评论 -
【Android 界面】剪切板的基本使用
Android 提供了一个强大的基于剪贴板的框架,用于复制和粘贴。它支持简单和复杂的数据类型,包括文本字符串、复杂数据结构、文本、二进制流数据,甚至应用资源。简单的文本数据直接存储在剪贴板中,而复杂的数据则存储为引用,执行粘贴操作的应用使用 Content Provider 对其进行解析。复制和粘贴既可以在应用内进行,也可以在实现了该框架的应用之间进行。剪切板类ClipboardManager在 Android 系统中,系统剪贴板由全局 ClipboardManager 类表示。您不能直接实例化此类;原创 2021-12-15 14:15:41 · 25805 阅读 · 1 评论 -
【Android 底层】Android 系统启动及应用程序进程启动的简单梳理
按下电源键后发生了什么?引导芯片代码从 ROM 中执行,将引导程序 BootLoader 加载到 RAM 中,并执行通过引导程序 BootLoader ,将系统OS拉起并运行启动 Linux 内核启动 init 进程init 进程系统中的第一个进程,进程号为1,主要职责为创建Zygote和Property Service创建和挂载启动所需的文件目录初始化和启动属性服务解析init.rc配置文件并启动Zygote进程僵尸进程在UNIX/Linux中,父进程使用 fork 创建子进原创 2021-12-08 21:17:29 · 2665 阅读 · 0 评论 -
【Android View】自定义ViewGroup——继承自ViewGroup的水平翻页视图HorizontalView的实现
自定义ViewGroup可按父类分为三类,分别为继承自ViewGroup、继承自系统特定的ViewGroup(如LinearLayout)和继承自View。其中第二种最为简单,第三种最为复杂,让我们先把目光放在第一种难度适中的情况。目标仿照 ViewPager 完成一个水平翻页视图,支持左右滑动切换不同的页面。开始继承ViewGroup首先,我们先创建一个HorizontalView类,并实现其抽象方法。public class HorinzontalView extends ViewGrou原创 2021-11-29 22:11:10 · 1564 阅读 · 0 评论 -
【Android View】View 的事件分发机制
Activity 的构成以Activity的setContentView方法为入口,查看源码可知:一个Activity包含一个Window对象,这个对象是由PhoneWindow来实现的。PhoneWindow将DecorView作为整个应用窗口的根View,而这个DecorView又将屏幕分为两个区域,即TitleView与ContentView,而我们正常做应用所写的布局正是展示在ContentView中的。View 的点击事件分发机制...原创 2021-11-22 20:06:21 · 1809 阅读 · 0 评论 -
【Android View】自定义View——以模仿TextView的AutoTextView实现为例
实现目标:实现TextView的基础功能,并修复其存在的Bug覆盖构造器重写onMearsure和onDraw自定义属性TypeArraytypeArray.recycle自动换行思路编码跑马灯效果实现原创 2021-11-19 15:39:24 · 2001 阅读 · 0 评论 -
【Android View】初识 View
Android程序中的一个个界面都是由View组成的,下面让我们一起来了解一下View吧!View 的分类如上图所示,系统的View大体分为两类,即View与ViewGroup,分别对应了控件与布局。View 的重要方法View 的工作流程一个View显示在屏幕上,经过了measure,layout,draw三个过程。其中,measure用来测量View的宽和高,layout用来确定View的位置,draw则用来绘制View。MeasureSpecMeasureSpec : View的一个原创 2021-11-18 14:37:09 · 1547 阅读 · 0 评论 -
Android中图片去色的两种方法
public class ImageUtil { public static Bitmap toGrayScale(Bitmap bmp) { int width, height; height = bmp.getHeight();//图片高度 width = bmp.getWidth(); Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RG原创 2021-11-11 10:48:12 · 541 阅读 · 0 评论 -
初识图片加载框架——Glide的简单用法
由于本人之前并未接触过图片的加载框架,近期在开发过程中频繁遇到了Glide的代码,因而对其的基本用法做了简单的学习,本次对学习中遇到的要点做一个简单的归纳总结。Why Glide?Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。相比其他框架,Glide有以下优势:易用:通过简单明了的链式编程,即可轻松实现图片加载不用担心内存浪费:Glide会自动判断ImageView的大小,然后只将这么大的图片像素加载到内原创 2021-11-10 15:22:55 · 2401 阅读 · 0 评论 -
Android 配置Build
构建流程构建流程即:将项目转换成APK或AAB文件的过程,具体参考下图。Android 官方文档对该流程的描述如下:编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。打包器将 DEX 文件和编译后的资源组合成 APK 或 AAB(具体取决于所选的 build 目标)。 必须先为 APK 或 AAB 签名,然后才能将应用安装到 Android 设备或分发到 Google Play 等商店。打包原创 2021-10-16 22:25:19 · 533 阅读 · 0 评论 -
Gradle 任务
多种方式创建任务以任务名称创建任务def Task ex41CreateTask1 = task(ex41CreateTask1)ex41CreateTask1.doLast { println "创建方法原型为:Task task (String name) throws InvalidUserDataException"}以一个任务名字+一个队该任务配置的Map对象来创建任务//2.以一个任务名字 + 一个对该任务配置的Map对象来创建任务def Task ex41CreateTa原创 2021-09-19 11:11:21 · 320 阅读 · 0 评论 -
Gradle基础(二):依赖
如何理解Gradle依赖?什么是依赖管理?通俗来讲,依赖管理由如下两部分组成。首先,Gradle 需要知道项目构建或运行所需要的一些文件,以便于找到这些需要的文件。我们称这些输入的文件为项目的依赖。其次,你可能需要构建完成后自动上传到某个地方。我们称这些输出为发布。依赖大部分工程都不太可能完全自给自足,一般你都会用到其他工程的文件。比如使用Retrofit库就得把它的类库加进来。这些文件就是工程的依赖。依赖解决Gradle 需要你告诉它工程的依赖是什么,它们在哪,然后帮你加入构建中。依赖可能需要原创 2021-09-07 10:10:34 · 1757 阅读 · 0 评论 -
Maven仓库简介
MavenMaven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven仓库什么是仓库在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。有哪些仓库Maven 仓库有三种类型:本地仓库 localMaven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。(publishToLocal脚本)运行 Maven 的时候,Maven 所需要的任何构件都是原创 2021-09-06 18:07:16 · 676 阅读 · 0 评论 -
Gradle基础(一):Gradle入门
Gradle版Hello Worldbuild.gradle是Gradle默认的构建脚本文件,执行Gradle命令的时候, 会默认加载当前目录下的build.gradle脚本文件。当然,也可以通过-b参数指定想要加载执行的文件。任务(Task):Gradle中最小可执行单元动作(Action): 一段Groovy语言实现的闭包task helloWorld { doLast { println "Hello World!" }}doLast:在Task执行完毕原创 2021-09-06 16:27:03 · 1797 阅读 · 1 评论 -
SpannableString——富文本的多样式使用
作者:孙博文时间:2021/9/4前言有一段文本,如果需要单独给它各部分文字设置不同的样式,有的文字设置为粗体,有的文字设置特殊的颜色,有的地方要加入表情/图片,遇到数学公式还可能要设置上下标,这时候就可以借助SpannableString实现啦~什么是 SpannableString?SpannableString,是 CharSequence的一种,原本的 CharSequence 只是一串字符序列,没有任何样式,而 SpannableString 可以在字符序列基础上对指定的字符进行润饰.原创 2021-09-06 09:50:25 · 284 阅读 · 0 评论 -
Android性能调优——严苛模式StrictMode
前情提要由于在demo中涉及了在主线程的网络操作,当时在开发时仅简单搜索了相关异常的处理方法,于是书写了以下代码:StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy .Builder() .permitAll() .build(); StrictMode.setThreadPolicy(policy); 这段代码很好的解决了抛异常的问题,但当时原创 2021-08-19 18:06:03 · 1972 阅读 · 0 评论 -
【Android基础组件】BroadCast——广播三两事
什么是广播?一般来说,广播可作为跨应用和普通用户流之外的消息传递系统。Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。应用也可以注册接收特定的广播。广播发出后,系统会自动将广播传送给同意接收这种广播的应用。举栗时间Android 系统会在发生各种系统事件时发送广播——如系统启动或设备开始充电时。应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件——如一些新数据已下载。有哪些原创 2021-08-18 14:50:25 · 853 阅读 · 0 评论 -
音视频播放器工作原理
参考博客:视频播放器的基本原理播放器基本原理(播放四步法)【Android 音视频开发打怪升级:音视频硬解码篇】一、音视频基础知识播放器播放流程网络文件:解协议,解封装,解码音视频,音视频同步;本地文件则没有解协议。解协议:将Http等流媒体协议传输的文件解析为标准的封装格式数据。如将RTMP协议传输的数据,经过解析操作后输出为FLV格式的数据。解封装(解复用):将输入的封装格式的数据,分离为音频流压缩编码数据和视频流压缩编码数据,即:分离信道。解码:将视频/音频压缩编码数据,解码成为非压原创 2021-08-10 09:35:17 · 1763 阅读 · 0 评论 -
OkHttp断点续传及文件下载思路
step 1:判断检查本地是否有下载文件,若存在,则获取已下载的文件大小downloadLength,若不存在,那么本地已下载文件的长度为 0step 2:获取将要下载的文件总大小(HTTP 响应头部的content-Length)step 3:比对已下载文件大小和将要下载的文件总大小(contentLength),判断要下载的长度step 4:在即将发起下载请求的 HTTP 头部中添加即将下载的文件大小范围(Range: bytes = downloadLength - contentLength.原创 2021-08-09 00:05:38 · 873 阅读 · 0 评论 -
多线程及线程池相关知识
Thread/Runnable/Callable实现 Runnable 接口相比继承 Thread 类有如下优势1)可以避免由于 Java 的单继承特性而带来的局限2)增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的3)线程池只能放入实现 Runable 或 Callable 类线程,不能直接放入继承 Thread 的类实现 Runnable 接口和实现 Callable 接口的区别1)Runnable 是自从 java1.1 就有了,而 Callable 是 1.5 之后才加上去原创 2021-08-05 00:25:10 · 114 阅读 · 0 评论 -
DevOps有关知识学习总结
本次学习分为了三部分,第一部分是敏捷开发的概念与实践方法简介,第二部分是研发协同平台及流程简介,第三部分是网络安全与信息安全。敏捷开发的概念与实践方法简介这一部分主要学习了软件项目的阶段和产出文档,以及软件开发的两个常见模式——瀑布与迭代,并由此引出了敏捷开发的概念及实践方法。软件项目的阶段软件项目一般分为三个阶段,包括:软件计划阶段、软件开发阶段与软件的使用和维护阶段。在软件计划阶段,主要对软件项目的资金、人员、时间等重点做出规划。软件开发阶段包括:需求分析、软件设计、软件编码和软件测试四原创 2021-07-25 21:07:46 · 384 阅读 · 0 评论 -
AccountBook开发总结及未来的优化方向
AccountBook开发总结及未来的优化方向项目介绍项目开发的目的与实现的功能项目使用到的技术项目展示涉及到的知识点MVC、MVP、MVVMViewModelRoomLiveData自定义控件未来的优化方向美化自定义控件一键退出程序添加账单时用对用户更加友好的方式记录日期让账单统计倒序显示账单展示页面按日期倒序排列账单完善管理功能,提供更多操作账单统计页面采用更为直观的方式展示,如数据可视化优化折叠式标题栏折叠上去后的系统状态栏选择日期时使用户无法选择晚于当下的日期目前已知的bug用户初次使用添加资产时,原创 2020-08-10 22:06:26 · 297 阅读 · 0 评论 -
那些年,我们在开发中遇到的错误
各种各样的错误Java多线程问题Exception in thread "Thread-0" java.lang.IllegalMonitorStateExceptionRoom相关配置问题Schema export directory is not provided to the annotation processor so we cannot export the schema.Java多线程问题Exception in thread “Thread-0” java.lang.IllegalMo原创 2020-08-06 09:57:10 · 316 阅读 · 0 评论 -
AccountBook 开发笔记
AccountBook 是我自己开发的第一款App,为了将学习的Android基础知识运用于实践中,以达到进一步熟悉并掌握Android开发的目的。这篇笔记记录了该App的开发过程与具体功能是实现的。时间2020.8.2总体规划自定义底部控件可折叠标题栏2020.8.2总体规划App使用MVVM架构,将界面相关的数据放置在ViewModel中三个基础Activity,分别展示资产/账单/账单统计,它们底部都需要一个控件以达到活动跳转的目的此外,还有两个Activity分别用来新增资产和新增.原创 2020-08-05 12:33:57 · 413 阅读 · 0 评论 -
SunnyWeather项目总结
SunnyWeather项目总结练手的第一个APP,总结了他人开发架构与方法,以搜索全球城市数据功能为例做的一个总结目录项目架构项目结构组件用途开发前准备:实现逻辑层SunnyWeatherApplication数据层PlaceResponse网络层PlaceServiceServiceCreatorSunnyWeatherNetwork仓库层 RepositoryViewModel 层PlaceViewModel实现UI层fragment_placeplace_item编写AdapterPlace原创 2020-07-31 18:07:18 · 1683 阅读 · 0 评论 -
《Java核心技术卷I》读书笔记
自己阅读java核心技术卷一的一些笔记,知识点原创 2020-07-08 16:00:22 · 327 阅读 · 0 评论 -
有关设计模式的一些问题与回答
设计模式可被分为哪三种类型?创建型:单例模式,抽象工厂模式,工厂方法模式行为型:模板方法模式,命令模式,策略模式,状态模式,迭代器模式,观察者模式结构型:适配器模式,组合模式,装饰模式,外观模式,代理模式为什么装饰模式属于结构型而非行为型模式?结构型模式用来描述类和对象如何被组合以建立新的结构或新的功能。装饰模式允许通过“将某对象包装进另一个对象的方式”,来组合对象以提供新的功能。所以焦点是在于如何动态地组合对象以获取功,能而不是行为型模式的目的——对象之间的沟通和互连。还可被分为哪两种类型?原创 2020-07-07 17:02:01 · 218 阅读 · 0 评论 -
应用软件架构课设-his医院管理系统项目总结
项目完成情况完成了项目的所有基本要求,除此之外,还完成了拦截器功能、分页显示功能和系统管理员模块实现方法:1.拦截器功能:在MedicalRecordController、AdminController与DoctorController中编写三个interceptor函数,分别在门诊管理员模块页面、系统管理员模块页面和医生管理员模块页面中完成拦截器功能。在interceptor函数函数中,通过session得到user的数据,并判断是否与相应的页面匹配,如匹配则正常访问,若不匹配则重提示不匹配并重原创 2020-07-07 16:45:41 · 908 阅读 · 0 评论 -
LeetCode141.环形链表
原题链接:https://leetcode-cn.com/problems/linked-list-cycle/141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tru...原创 2020-04-29 12:36:09 · 151 阅读 · 0 评论 -
《Java编程思想》读书笔记
第一章:对象导论1)万物皆为对象2)程序是对象的集合,它们通过发生消息来告知彼此所要做的3)每个对象都有自己的有其他对象所构成的存储4)每个对象都有其类型5)某一特定类型的所有对象都可以接收同样的消息–可替代性第二章:一切都是对象自动装箱:自动将基本类型转换为包装器类型自动拆箱:自动将包装器类型转换为基本类型成员变量会默认被初始化,局部变量不会。方法签名:方法名和参数列表st...原创 2020-04-22 22:44:35 · 241 阅读 · 0 评论 -
初识java并发编程
进程是系统资源分配的最小单位,线程是程序执行的最小单位。一个进程中可以包含多个线程。进程中储存空间有堆和方法区。线程中有栈和变量区。线程有三种创建方法,第一种是继承thread类,第二种是实现runnable接口。第三种futuretask。继承的方法能够比较方便的传参。但Java是单继承语言继承thread类之后无法继承其他类。实现runnable接口的方法可以继承其他类,但这两种方法都...原创 2020-04-16 10:22:03 · 160 阅读 · 0 评论 -
[转]高效使用Github寻找开源项目
原文链接:http://xuewei.world:8000/2020/03/30/%e9%ab%98%e6%95%88%e4%bd%bf%e7%94%a8github%e5%af%bb%e6%89%be%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae/原作者: 莫提怎么在GitHub上靠谱的找一些开源项目按照项目名/仓库名搜索(大小写不敏感)in:name xxx...转载 2020-04-07 15:58:35 · 244 阅读 · 0 评论 -
LeetCode7.整数反转
原题链接:https://leetcode-cn.com/problems/reverse-integer/7. 整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范...原创 2020-04-06 13:17:24 · 121 阅读 · 0 评论 -
腾讯移动客户端开发(安卓方向)2020暑期实习一面面经
腾讯移动客户端开发(安卓方向)2020暑期实习一面面经废话不多说,直接上问题问题1.自我介绍2.项目相关3.Java的基本数据类型(8种)4.Java语言的特性(继承,多态,封装)5.面向对象编程和面向过程编程各自是什么,有哪些区别6.==和equals有什么区别?7.学过设计模式吗(我坦言还没有学过,正准备学习)8.http和https有什么区别?9.TCP连接建立过程是几...原创 2020-04-02 12:11:24 · 2525 阅读 · 1 评论 -
2020暑期实习笔面试review
2020暑期实习笔面试review(一)自习与总结线程创建后,调用start()方法进入就绪状态线程创建后,调用run()方法进入运行状态在同一Thread对象上不允许两次调用strat()方法线程调用stop()后进入终止状态BLOCKED(阻塞等待)和 WAITING(等待)有什么区别?start() 方法和 run() 方法有什么区别?线程的优先级有什么用?该如何设置?...原创 2020-03-24 12:40:08 · 661 阅读 · 1 评论