自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 【Android 界面】剪切板的基本使用

Android 提供了一个强大的基于剪贴板的框架,用于复制和粘贴。它支持简单和复杂的数据类型,包括文本字符串、复杂数据结构、文本、二进制流数据,甚至应用资源。简单的文本数据直接存储在剪贴板中,而复杂的数据则存储为引用,执行粘贴操作的应用使用 Content Provider 对其进行解析。复制和粘贴既可以在应用内进行,也可以在实现了该框架的应用之间进行。剪切板类ClipboardManager在 Android 系统中,系统剪贴板由全局 ClipboardManager 类表示。您不能直接实例化此类;

2021-12-15 14:15:41 25527 1

原创 安卓开发常见面试问题总结

自己就之前的面试经历,以及其他比较常见的安卓开发面试的问题做的一些总结

2020-07-26 00:27:09 7511 6

原创 【Android 图像显示系统】整体架构与缓冲区策略

带你了解Android图像显示系统的整体架构与缓存区策略~

2022-06-24 17:37:29 2472 1

原创 【Android 源码】Android 系统服务的获取

帮你了解Android系统服务的获取

2022-06-01 15:48:01 586

原创 【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 1601

原创 【开发笔记】解决Glide加载图片后ImageView的tint属性失效问题

使用Glide加载图片后发现图片tint属性失效,需要重新设置,在此记录

2022-02-10 14:46:05 2073

原创 【Android 进阶】理解 Context

Context,即上下文,是Android中常用的类之一。但是很多人仅停留在了“会用”这一阶段,没有做到“知其然,知其所以然”。本篇文章将较为详细的为大家介绍一下Context,帮助大家更加深入的理解Android程序员的这一“老朋友”。

2022-01-28 22:44:23 2806

原创 Android Gradle 高级自定义

Android Gradle 自定义配置

2021-12-26 21:35:38 1446

原创 【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 2658

原创 【Android View】自定义ViewGroup——继承自ViewGroup的水平翻页视图HorizontalView的实现

自定义ViewGroup可按父类分为三类,分别为继承自ViewGroup、继承自系统特定的ViewGroup(如LinearLayout)和继承自View。其中第二种最为简单,第三种最为复杂,让我们先把目光放在第一种难度适中的情况。目标仿照 ViewPager 完成一个水平翻页视图,支持左右滑动切换不同的页面。开始继承ViewGroup首先,我们先创建一个HorizontalView类,并实现其抽象方法。public class HorinzontalView extends ViewGrou

2021-11-29 22:11:10 1554

原创 【Android View】View 的事件分发机制

Activity 的构成以Activity的setContentView方法为入口,查看源码可知:一个Activity包含一个Window对象,这个对象是由PhoneWindow来实现的。PhoneWindow将DecorView作为整个应用窗口的根View,而这个DecorView又将屏幕分为两个区域,即TitleView与ContentView,而我们正常做应用所写的布局正是展示在ContentView中的。View 的点击事件分发机制...

2021-11-22 20:06:21 1802

原创 【Android View】自定义View——以模仿TextView的AutoTextView实现为例

实现目标:实现TextView的基础功能,并修复其存在的Bug覆盖构造器重写onMearsure和onDraw自定义属性TypeArraytypeArray.recycle自动换行思路编码跑马灯效果实现

2021-11-19 15:39:24 1993

原创 【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 1542

原创 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 529

原创 初识图片加载框架——Glide的简单用法

由于本人之前并未接触过图片的加载框架,近期在开发过程中频繁遇到了Glide的代码,因而对其的基本用法做了简单的学习,本次对学习中遇到的要点做一个简单的归纳总结。Why Glide?Glide是一款由Bump Technologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。相比其他框架,Glide有以下优势:易用:通过简单明了的链式编程,即可轻松实现图片加载不用担心内存浪费:Glide会自动判断ImageView的大小,然后只将这么大的图片像素加载到内

2021-11-10 15:22:55 2393

原创 Android 配置Build

构建流程构建流程即:将项目转换成APK或AAB文件的过程,具体参考下图。Android 官方文档对该流程的描述如下:编译器将您的源代码转换成 DEX 文件(Dalvik 可执行文件,其中包括在 Android 设备上运行的字节码),并将其他所有内容转换成编译后的资源。打包器将 DEX 文件和编译后的资源组合成 APK 或 AAB(具体取决于所选的 build 目标)。 必须先为 APK 或 AAB 签名,然后才能将应用安装到 Android 设备或分发到 Google Play 等商店。打包

2021-10-16 22:25:19 522

原创 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 313

原创 Gradle基础(二):依赖

如何理解Gradle依赖?什么是依赖管理?通俗来讲,依赖管理由如下两部分组成。首先,Gradle 需要知道项目构建或运行所需要的一些文件,以便于找到这些需要的文件。我们称这些输入的文件为项目的依赖。其次,你可能需要构建完成后自动上传到某个地方。我们称这些输出为发布。依赖大部分工程都不太可能完全自给自足,一般你都会用到其他工程的文件。比如使用Retrofit库就得把它的类库加进来。这些文件就是工程的依赖。依赖解决Gradle 需要你告诉它工程的依赖是什么,它们在哪,然后帮你加入构建中。依赖可能需要

2021-09-07 10:10:34 1692

原创 Maven仓库简介

MavenMaven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven仓库什么是仓库在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库。有哪些仓库Maven 仓库有三种类型:本地仓库 localMaven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。(publishToLocal脚本)运行 Maven 的时候,Maven 所需要的任何构件都是

2021-09-06 18:07:16 674

原创 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 1783 1

原创 SpannableString——富文本的多样式使用

作者:孙博文时间:2021/9/4前言有一段文本,如果需要单独给它各部分文字设置不同的样式,有的文字设置为粗体,有的文字设置特殊的颜色,有的地方要加入表情/图片,遇到数学公式还可能要设置上下标,这时候就可以借助SpannableString实现啦~什么是 SpannableString?SpannableString,是 CharSequence的一种,原本的 CharSequence 只是一串字符序列,没有任何样式,而 SpannableString 可以在字符序列基础上对指定的字符进行润饰.

2021-09-06 09:50:25 279

原创 Android性能调优——严苛模式StrictMode

前情提要由于在demo中涉及了在主线程的网络操作,当时在开发时仅简单搜索了相关异常的处理方法,于是书写了以下代码:StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy .Builder() .permitAll() .build(); StrictMode.setThreadPolicy(policy); 这段代码很好的解决了抛异常的问题,但当时

2021-08-19 18:06:03 1932

原创 【Android基础组件】BroadCast——广播三两事

什么是广播?一般来说,广播可作为跨应用和普通用户流之外的消息传递系统。Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似。这些广播会在所关注的事件发生时发送。应用也可以注册接收特定的广播。广播发出后,系统会自动将广播传送给同意接收这种广播的应用。举栗时间Android 系统会在发生各种系统事件时发送广播——如系统启动或设备开始充电时。应用可以发送自定义广播来通知其他应用它们可能感兴趣的事件——如一些新数据已下载。有哪些

2021-08-18 14:50:25 827

原创 音视频播放器工作原理

参考博客:视频播放器的基本原理播放器基本原理(播放四步法)【Android 音视频开发打怪升级:音视频硬解码篇】一、音视频基础知识播放器播放流程网络文件:解协议,解封装,解码音视频,音视频同步;本地文件则没有解协议。解协议:将Http等流媒体协议传输的文件解析为标准的封装格式数据。如将RTMP协议传输的数据,经过解析操作后输出为FLV格式的数据。解封装(解复用):将输入的封装格式的数据,分离为音频流压缩编码数据和视频流压缩编码数据,即:分离信道。解码:将视频/音频压缩编码数据,解码成为非压

2021-08-10 09:35:17 1739

原创 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 842

原创 多线程及线程池相关知识

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 108

原创 DevOps有关知识学习总结

本次学习分为了三部分,第一部分是敏捷开发的概念与实践方法简介,第二部分是研发协同平台及流程简介,第三部分是网络安全与信息安全。敏捷开发的概念与实践方法简介这一部分主要学习了软件项目的阶段和产出文档,以及软件开发的两个常见模式——瀑布与迭代,并由此引出了敏捷开发的概念及实践方法。软件项目的阶段软件项目一般分为三个阶段,包括:软件计划阶段、软件开发阶段与软件的使用和维护阶段。在软件计划阶段,主要对软件项目的资金、人员、时间等重点做出规划。软件开发阶段包括:需求分析、软件设计、软件编码和软件测试四

2021-07-25 21:07:46 377

原创 2020.9.8 oppo Java开发(Android)一面面经

oppo Java开发(Android)一面面经写在前面:面试官是在一个专门面试的房间里,房间里大约有五六名面试官在各自面试,环境极其嘈杂,很难听清面试官的问题,面试体验很差问题自我介绍Android四大组件安卓消息处理机制安卓中进程运行在哪介绍一下volatile使用volatile有哪些限制(规则)Java中的引用http和https的区别了解安卓开发架构吗,具体使用过哪些架构电梯的实现用到了哪些设计模式?控制电梯在运动中不进行开门关门功能,可以使用哪种设计模式你还了解

2020-09-09 18:16:51 3117 1

原创 2020.8.27 科大讯飞Android开发二面面经

一面后,正在写一面面经的我突然接到了二面的通知电话。。经过和面试官的交流之后,发现自己好像被非求职意向的部门捞了,后续好像还要加面。。科大讯飞Android开发二面面经面试问题自我介绍为什么得到这个奖项?项目经验介绍怎么想到学习Android的为什么对Android开发感兴趣?是否考虑其他方向?解释一下项目经历为什么集中在最近一年?最近做的这几个APP都是自己开发,练手的吗?后端的项目接触过吗?操作系统,计算机网络等计算机基础课都学过吗?了解http吗?https如何保证.

2020-08-27 16:42:55 2858

原创 2020.8.27 科大讯飞Android开发一面面经

科大讯飞Android开发一面面经面试问题自我介绍项目介绍如何理解面向对象编程?String与StringBuffer有什么区别?什么时候需要使用String,什么时候需要使用StringBuffer?使用过哪些Map?HashMap是线程安全的吗?为什么?ConcurrentHashMap为什么是线程安全的?一直是分段锁实现的吗?分段锁有哪些好处?Java保证线程安全的手段?锁可以分为哪几种?使用过网络框架吗?使用过底层的网络相关操作吗?说一下三次握手输入网址后,发生了哪

2020-08-27 16:20:15 2189

原创 2020.8.26 京东Android开发HR面面经

京东Android开发HR面面经面试问题自我介绍推理题:红蓝眼睛问题假如让你西天取经,你会考虑谁加入你的团队?请根据以下四人的人物特性做出选择,并排出考虑的优先级位次。武则天,林黛玉,郑和,李逵。如果让你为上述四人在互联网公司中安排工作,你会如何安排?你的人生巅峰时刻,或者说最满意的事情是什么,试举出1-3个例子为什么不选择考研?反问什么时候能出结果?(9月10日之前)如果有幸获得Offer,什么时候可赴公司实习?(由求职者自行决定)...

2020-08-26 21:52:15 573

原创 2020.8.25 斗鱼Android开发二面面经

本次面试全是开发技术相关问题,暴露了我只具备基础知识,开发经验不足的问题,希望自己以后抓紧推进后续学习,早日补上漏洞。斗鱼Android开发二面面经面试问题自我介绍疫情期间的学习安排介绍一下项目功能项目中用到了哪些框架?常用图片框架了解吗?如何加载网上的图片资源?如何获取一个根目录下的图片?你项目中的图片都放在哪里?为什么?如果你的APP运行在一个720p的手机上,会发生什么?通过src设置图片和通过bg设置图片有什么区别?图片放置都有哪些模式,需要设置哪一个参数?网络框架.

2020-08-26 21:39:21 2156 4

原创 2020.8.20 斗鱼Android开发一面面经

斗鱼Android开发一面面经8.15号笔试,昨天下午发邮件通知加群面试,面试方式是使用腾讯会议进行远程面试问题自我介绍如何选择工作地点?安卓是如何学习的?项目是自己开发的还是小组开发的?项目中用到了哪些库?项目中哪个功能点的实现让你觉得有成就感,怎么实现的?除了Kotlin,其他的热门技术接触过吗?(热修复,插件化,Flutter)安卓中最常见的三大问题?(ANR,OOM和内存泄漏)开启一个耗时任务,可以使用哪些方式?(Service,线程)还有吗?(Android消息处理机

2020-08-20 16:34:36 1032 1

原创 2020.8.18 腾讯校招客户端开发一面面经

腾讯校招客户端开发(Android方向)一面面经本次面试考察的几乎全是在学校学习的计算机基本知识,重点考察了操作系统具体问题在校学习情况项目如何爬取数据并保存基本SQL语句C/C++了解吗C中的stdio库进程与线程之间的关系进程之间的通信方法线程的同步方法死锁是什么,遇到过吗操作系统中异常是怎么处理的操作系统中的中断32位的操作系统能存多大的数据操作系统的内存是怎么分配的JVM内存模型除了堆栈还有哪些堆栈内存具体是怎么申请的TCP如何保证可靠三次握手编程题

2020-08-18 11:09:13 2918

原创 2020.8.13 京东Android开发二面

本次面试着重考察了计算机基础知识,Android相关均未涉及,及时暴露了我的一些漏洞,时间尚早,尽快补上来吧。2020.8.13 京东Android开发二面问题聊项目用过哪些数据库数据库索引,如何实现,怎么使用数据库范式Java最新版本特性Java类加载机制双亲委派机制如何实现稳定性与安全性JVM内存模型Java线程安全如何实现lock如何使用悲观锁、乐观锁Java 与 闭包sychronized如何使用TCP三次握手归并排序如何实现编译原理还记得哪些兴趣爱好优.

2020-08-13 16:57:03 2147 6

原创 2020.8.12 京东Android开发工程师一面面经

7.27号投递的简历,6号笔试,11号上午短信+邮件通知12号下午15.30电话面试。面试官口音是正宗川普,好几次我都没听清,让面试官重复了好几次问题,还好面试官有耐心hhh2020.8.12 京东Android开发工程师一面面经面试问题自我介绍.项目经历面向对象三大特性介绍String、StringBuffer和StringBuilderhashmap扩容为何扩容为2倍hashmap如何解决冲突hashmap做了哪些优化线程与进程的关系Java中线程如何实现同步Sychro.

2020-08-12 16:44:17 2247 2

原创 AccountBook开发总结及未来的优化方向

AccountBook开发总结及未来的优化方向项目介绍项目开发的目的与实现的功能项目使用到的技术项目展示涉及到的知识点MVC、MVP、MVVMViewModelRoomLiveData自定义控件未来的优化方向美化自定义控件一键退出程序添加账单时用对用户更加友好的方式记录日期让账单统计倒序显示账单展示页面按日期倒序排列账单完善管理功能,提供更多操作账单统计页面采用更为直观的方式展示,如数据可视化优化折叠式标题栏折叠上去后的系统状态栏选择日期时使用户无法选择晚于当下的日期目前已知的bug用户初次使用添加资产时,

2020-08-10 22:06:26 290

原创 2020.8.8 美团笔试

1. 计算器输入:5个数字,为1-5星评价数量输出:平均评价星级(截尾法保留一位小数)如:输入:1 1 2 2 2输出:3.3import java.text.DecimalFormat;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int sumCou

2020-08-09 10:35:05 533

原创 那些年,我们在开发中遇到的错误

各种各样的错误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 306

原创 AccountBook 开发笔记

AccountBook 是我自己开发的第一款App,为了将学习的Android基础知识运用于实践中,以达到进一步熟悉并掌握Android开发的目的。这篇笔记记录了该App的开发过程与具体功能是实现的。时间2020.8.2总体规划自定义底部控件可折叠标题栏2020.8.2总体规划App使用MVVM架构,将界面相关的数据放置在ViewModel中三个基础Activity,分别展示资产/账单/账单统计,它们底部都需要一个控件以达到活动跳转的目的此外,还有两个Activity分别用来新增资产和新增.

2020-08-05 12:33:57 383

空空如也

空空如也

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

TA关注的人

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