自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Framework编译并使用Android studio阅读源码指导

当前值太小,需要修改 /etc/sysctl.conf 文件,修改这个文件需要Root权限。

2024-01-10 22:26:49 473 1

原创 Ubuntu20.04系统同步Android系统源码指导

1.安装gitsudo apt-get install git 安装成功后查看git版本git --version出现git版本,即安装成功。下载git后,设置git账户:git config --golbal user.email “[email protected]”git config --global user.name “xxxxx”如下图:2.安装curl库sudo apt-get install curl3.安装repo并设置权限curl https://mirrors.tuna.tsinghua.ed

2023-12-10 14:32:21 173

原创 Android使用RecyclerView实现日期分组以及时间轴显示

【代码】Android使用RecyclerView实现日期分组以及时间轴显示。

2023-12-02 17:12:41 564 1

原创 ubuntu20.04系统安装配置指导

处理器数量选择1,每个处理器的内核数量选择CPU的线程数,例如我的CPU是6核12线程,那么选择12,点击下一步。建议虚拟机内存的设置不要超过实际物理机的内存,例如我的物理机内存是40G,就选择32G,点击下一步。点击Continue,等待安装完成,重启虚拟机即可。根据你的磁盘空间,最大磁盘空间尽可能设置大一点,设置1024G,点击下一步。虚拟机选择你喜欢的名字,位置选择剩余空间超过500G的路径,点击下一步。操作系统选择Linux,版本选择ubuntu 64位,点击下一步。选择稍后安装系统,点击下一步。

2023-08-13 20:49:26 1517

原创 Android自定义音视频播放器

自定义View播放器已经实现了,但我们需要掌握MediaPlayer的初始化过程是怎么样的,MediaPlayer做了哪些工作,音视频数据如何渲染到SurfaceView上面的,这需要把MediaPlayer框架原理搞清楚。随着快手,抖音,西瓜视频等视频APP的崛起,视频播放已经成为主流,此时做为Android研发的你,想要提升本身的能力还不知道怎么开发视频播放器怎么行?等等,这些部分的播放器我们在开发过程中,使用过这些视频播放框架来播放本地视频或者网络视频,但不一定会满足业务需求的。

2023-04-24 22:34:44 1459 2

原创 Android动画特效之Animator属性动画实现

Android动画特效之Animator属性动画实现。

2022-11-23 10:43:55 1428

原创 Android动画特效之自定义View

Android动画特效之自定义View

2022-10-27 17:50:21 2066

原创 Java基础集合类汇总

1.ArrayMap 综述特点:1).实现了Map接口,并使用int[]数来存储key的hash值,数组的索引用作index,而使用Object[]数组来存储key<->value ,这还是比较新颖的。2).使用二分查找查找hash值在key数组中的位置,然后根据这个位置得到value数组中对应位置的元素。3).和SparseArray类似,当数据有几百条时,性能会比HashMap低50%,因此ArrayMap适用于数据量很小的场景。2.ArrayMap和HashMap的区别

2022-02-04 17:17:59 211

原创 Android内存优化那些事

相信小伙伴们在开发过程中,最经常使用的是LeakCanary开源框架来监控内存泄漏存在的问题点,这样效率比较高,而且迅速发现问题点,其次做相应的优化处理,但LeakCanary毕竟是开源框架,由于特殊原因,可能不允许使用LeakCanary开源框架来分析潜在的内存泄漏。因此,我们经常使用内存分析工具来检测潜在的内存泄漏的场景。我们采用Memory Profiler和 MAT分析工具来检测应用是否存在内存泄漏。先来源码:MemoryMonitorActivity:public class..

2021-10-30 19:48:11 1820

原创 Android ANR日志分析进行曲

定义ANR(Application Not Responding)应用程序无响应。如果你应用程序在UI线程被阻塞太长时间,就会出现ANR,通常出现ANR,系统会弹出一个提示提示框,让用户知道,该程序正在被阻塞,是否继续等待还是关闭。ANR出现的原因1:主线程频繁进行耗时的IO操作:如数据库读写(UI线程等待其它线程释放某个锁,导致UI线程无法处理用户输入);2:多线程操作的死锁,主线程被block;3:主线程被Binder 对端block;4:System Server中WatchDog.

2021-09-26 22:28:50 636

原创 Android SDK开发架构设计案例详解(一)

相信做Android开发的小伙伴,肯定使用过很多第三方的 SDK,比如极光 SDK、支付宝 SDK、微博 SDK 等等。所谓 SDK 就是一个开发工具包,全称是 Software Development Kit,翻译过来是软件开发工具包。SDK 通常是为辅助开发某类软件而编写的特定软件包。App 开发与 SDK 开发的工作有什么区别呢?App开发更偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而SDK开发更偏向于功能方面,注重功能的开发实现,轻 UI。SDK设计原则核心原则:

2021-08-02 22:21:23 986 1

原创 Android设计模式之桥接模式

由于上期文章 Java常用设计模式知识点总结中,并没有涉及到桥接模式,因此,此文章补充讲解桥接模式,桥接模式在设计上不好理解,通过代码例子能够方便深入理解其桥接模式。桥接模式定义如下:将抽象部分与它实现部分分离,使它们都可以独立地变化。桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则。桥接(Bridge)模式的优点是:1.抽象与实现分离,扩展能力强;2.符合开闭原则;

2021-07-19 19:29:33 199

原创 线程、多线程和线程池面试专题

1、什么是线程线程就是进程中运行的多个子任务,是操作系统调用的最小单元。2、线程的状态New:新建状态,new出来,还没有调用start。Runnable:可运行状态,调用start进入可运行状态,可能运行也可能没有运行,取决于操作系统的调度。Blocked:阻塞状态,被锁阻塞,暂时不活动,阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态。Waiting:等待状态,不活动,不运行任何代码,等待线程调度器调度,wait sleep。Timed

2021-06-29 20:11:01 125

原创 浅谈Android开发招聘需求需必备的技能

首先我在boss直聘截取部分截图,先了解职位具体需求

2021-05-29 22:33:52 213

原创 从菜鸟到Android中高级工程师进阶之路

我在百忙之中通过写一篇文章来帮助更多的Android程序员提升自己,因为我也是从菜鸟过来的,所以我会结合我的个人经历以及我对Android学习过程的认识来写这篇文章,这会让这篇文章更加真实。目前我具备了6年以上的Android开发经验,中间也经历过不少弯路,一步一步走过来真的很不容易。我刚才说到,我也是从一个Android菜鸟过来的,其实这句话放在任何人的身上都是适用的。技术只在同等的工作年限其实很多,也有比我技术厉害多的是。我投入大量的业余时间在Android开发上,并且我习惯去思考问题,总结问题并将其融

2021-05-29 22:29:43 235 2

原创 FFmpeg相关结构体介绍

FFmpeg常用结构体介绍AVFormatContext是一个贯穿全局的数据结构。AVInputFormat是FFmpeg的解复用器对象。表示输入文件容器格式。AVStream是存储每一个视频/音频流信息的结构体。解复用器的目的就是从容器中分离(解析出来)不同的流,FFmpeg中的流对象为AVStream。它是由解复用器的read_header函数创建的,并保存在AVFormatContext的nb_streams(容器中的流条数)及streams数组中。AVCodecContext这是一个

2021-05-16 09:59:01 142

原创 直播技术基础知识

直播原理通过计算机上的音视频输入设备或者手机端摄像头和麦克风实时录制的音视频流,编号码后通过直播协议将数据包实时发送给服务器端,服务器端通过流媒体协议把实时流分发出去,其他终端通过直播协议实时请求数据包,并进行解码播放,这就是直播原理。直播架构直播架构主要两块,第一块是采集数据推流过程,包括对数据进行编码,通过流媒体协议传输到服务器上。第二块是服务器端收到推流数据后,进行内容分发及中间转存处理。最后一块是播放器进行拉流操作。这其中不只是播放音视频,还可以做一些实时美颜和滤镜效果。直播过程

2021-05-15 12:45:46 1103

原创 Android音视频基础知识

帧率(frame Rate) 是用于测量显示帧数的量度。测量单位为每秒显示帧数(frames per second 简称fps)或“赫兹”(HZ)。每秒显示帧数(fps)或者帧率表示图形处理器处理场时每秒能够更新次数。视频分辨率是指视频成像产品所形成的图像大小或尺寸。刷新率是指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常是指垂直刷新率。垂直刷新率表示屏幕上图像每秒重绘多少次,也就是每秒屏幕刷新的次数,以HZ(赫兹)为单位。刷新率越高,图像就越稳定,图像显示就越自然

2021-05-15 09:30:33 398

原创 Android音视频开发图解

Android音视频开发学习路线,具备这些知识摄像头相关配置参数实时获取摄像头原始数据NV21原始数据编码操作的线程,编码h.264格式数据public void startEncoderThread(){ Thread EncoderThread = new Thread(new Runnable() { @SuppressLint("NewApi") @Override p

2021-05-04 22:54:13 378

原创 作为Android开发者,仅仅只是我本职的工作吗?

从事Android开发工作2至5年以上的工作经验,这些只是我的本职工作吗?Android工程师具备扎实的Java知识以及Android基础知识,Android开发工程师在开发过程中经常编写业务代码,调用第三方集成SDK相关接口的使用或者开源框架,仅仅在会使用阶段,Android工程师很少去SDK内部深入源码以及流程,基本都是望而却步。例如Glide、Retrofit、OKHttp框架以及即时通讯SDK等等,当然也包括ffmpeg多媒体编解码库,framework层,由于需具备C/C++基础,阅读ff...

2021-04-28 23:26:08 68

原创 ArrayList源码分析

1.ArrayList介绍 ArrayList是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List,RandomAccess,Cloneable,java.io.Serializable这些接口。2.ArrayList的线程安全性 对ArrayList进行添加元素的操作的时候是分两个步骤进行的:.即第一步先在object[size]的位置上存放需要添加的元素; .第二步将size的值增加1。由于这个过程在多线程的..

2021-04-27 20:20:37 106

原创 ArrayMap原理解析

1.ArrayMap是什么一个通用的key-value映射数据结构相比HashMap会占用更少的内存空间android.util和android.support.v4.util都包含对应的ArrayMap类2.为什么要使用ArrayMapArrayMap是一个普通的键值映射的数据结构,这种数据结构比传统的HashMap有着更好的内存管理效率。传统HashMap非常的好用,但是它对内存的占用非常的大。为了解决HashMap更占内存的弊端,Android提供了内存效率更高的ArrayM...

2021-04-24 23:32:20 5381 1

原创 Android大厂面试真题案例

1.Bundle被用来传递数据,为什么不用HashMap代替?从Bundle源码分析,说明我们的Bundle它实现的数据传递是通过我们的ArrayMap实现的,所以说实际上我们的这个Bundle为什么不用HashMap来替代。实际上就是说为什么我们的Android传递数据的时候要用ArrayMap,而不用HashMap。Bundle的优势:ArrayMap适合于小数据量操作,如果在数据量比较大的情况下,它的性能将退化。HashMap内部则是数组+链表结构,所以在数据量较少的时候,HashMap的

2021-04-23 00:15:06 117

原创 HashMap解析

HashMap中常见的属性 //HashMap的 初始容量为 16 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //最大容量 static final int MAXIMUM_CAPACITY = 1 << 30; //默认的扩容因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; //转换红黑树的临界值,当链表长度大于此值时,会把链表结构转换为红黑树

2021-04-20 22:30:30 141

原创 Android 应用程序进程以及Activity启动过程总结

应用程序进程简介 要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。AMS在启动应用程序时 会检查这个应用程序需要的应用程序进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程。我们知道在Zygote的java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建应用程序进程。Zygote进程通过fork自身创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建虚拟机实例,还创建了B...

2021-03-17 20:14:49 249

原创 Android系统启动流程总结

1.启动电源以及系统启动 当电源按下时引导芯片代码从预定的地方(固化ROM)开始执行。加载引导程序BootLoader到RAM,然后执行。2.引导程序BootLoader 引导程序BootLoader是在Android操作系统开始运行前的一个小程序,它的主要作用是把系统OS拉起来并运行。3.Linux内核启动 当内核启动时,设置缓存、被保护器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找 init.rc文件,并启动init进程。4.init进程...

2021-03-15 20:00:54 93

原创 LeakCanary 检测泄漏点分析

·AsyncTask是一个匿名的内部类,隐式的持有外部类(MainActivity)的引用,当activity被销毁的时候,如果AsyncTask(代码sleep 20秒,模拟了一个耗时操作)没有执行完成,则MainActivity将会泄漏·关于隐式引用----内部类可以直接去调用外部类的成员(属性和方法),如果没有持有外部类的引用,内部类是没办法去调用外部类的成员,但是内部类又没有显示的去指定声明引用,所以称之为隐式引用。LeakCanary 的机制如下: 1.R...

2021-03-03 20:33:28 247

原创 Retrofit深入理解

Retrofit是什么Retrofit是一个RESTful的HTTP网络请求框架的封装网络请求的工作本质上是OKHTTP完成,而Retrofit仅负责 网络请求接口的封装1、app应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数、header、URL等信息,之后由OKHTTP完成后续的请求操作;2、在服务端返回数据之后,OKHTTP将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析;Retrofit封装的特点1、Ok.

2021-03-02 19:09:06 189

原创 LeakCanary 内存检测原理

LeakCanary 排查内存泄露原理通过registerActivityLifecycleCallbacks监听activity生命周期,当activity执行onDestroy方法时,证明当前activity会被回收。activityRefWatcher类则在registerActivityLifecycleCallbacks的onActivityOnDestroy方法里,把当前activity放在KeyedWeakReference(WeakReference的子类)中,通过查询Refere.

2021-02-24 10:20:07 148

原创 Android 通过adb命令操作

adb shell am start-activity -S -W com.android.settings/com.android.settings.Settings 打开设置界面adb shell dumpsys window w |findstr \/ |findstr name= 获取前台运行的APP包名和类名,adb -s FAJBB19429151166 install D:\apk\com.nawensoft.nsptt_3.3.1_29.apk 通过命令安装应...

2021-01-26 15:45:09 380

原创 Android-Universal-Image-Loader

一、介绍 Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。所以,如果你的程序里需要这个功能的话,那么不妨试试它。因为已经封装好了一些类和方法。我们 可以直接拿来用了。而不用重复去写了。其实,写一个这方面的程序还是比较麻烦的,要考虑多线程缓存,内存溢出等很多方面。二、具体使

2016-08-15 17:47:49 78

原创 强引用弱引用的概念

首先我们来了解下什么是强引用和什么是弱引用?强引用是指创建一个对象并把这个对象赋给一个引用变量, 强引用有引用变量指向时永远不会被垃圾回收。即使内存不足的时候宁愿报OOM也不被垃圾回收器回收,我们new的对象都是强引用弱引用通过weakReference类来实现,它具有很强的不确定性,如果垃圾回收器扫描到有着WeakReference的对象,就会将其回收释放内存

2016-08-10 21:40:41 187

空空如也

空空如也

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

TA关注的人

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