自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android透明状态栏——你要的只是几个方法

以前写的项目基本没有考虑过Android透明状态栏的,最近项目有用到,便网上搜索一番。搜到的文章要么是讲解不全、存在错误,要么就是使用一些库,也不说原理,上来就是给你看效果图,然后十几个方法让你眼花缭乱,看源码就是越看越复杂。算了,自己写个简单能用的就好。所以,本文将通俗易懂地介绍Android透明状态栏原理,以及几种常见使用场景的处理方法。下面是实现的效果:以上效果支持状态栏和标题栏(To...

2020-04-24 17:42:56 2610 1

原创 音视频之动态创建so库文件(一)ndk环境变量配置

首先勾选DNK选项然后点击Apply即可等待下载自动解压完成就可以了3. 找到下载好的目录打开android studio选择file然后选择project structure即可找到NDK下载好的所在目录,记得复制NDK路径接下来我们开始配置NDK环境变量看图即可:5. 最后输入命令 ndk-build即可...

2020-04-22 14:13:55 139

原创 Javah生成JNI头文件出现找不到类的错误(踩坑)

坑:在Android Studio上新建 NDK Javah生成JNI头文件出现找不到类的错误,通过命令生成.h头文件:javah -d …/jni -jni 包名.MyJni,一执行就说找不到类,翻build下的classes文件又能找到编译的类。跟着命令一步步的敲了的啊,我也十分确认没敲错或者敲漏,可为什么就遇到坑了啊o(╥﹏╥)o。其中参考: 使用Android Studio调用C++ 代...

2020-04-22 09:31:25 2221 1

原创 Android 最新崩溃日志手机端显示

SpiderManSpiderMan能为您做的事:在Android手机上显示闪退崩溃信息,直接分享给相关开发人员!再也不用担心测试妹妹给你重现怎样操作才能触发闪退崩溃的尴尬!再也不用担心产品给你说哪儿哪儿会闪退崩溃,但是又不能场景还原的无奈!再也不用担心某些国产Rom禁止异常log输出!再也不用担心开发工具异常log信息输出时灵时不灵!引入依赖从1.1.4版本开始全面迁移到a...

2020-04-22 07:41:15 918 1

原创 支持侧滑删除的RecyclerView

拿走不谢public class SlideRecyclerView extends RecyclerView { private static final String TAG = "SlideRecyclerView"; private static final int INVALID_POSITION = -1; // 触摸到的点不在子View范围内 privat...

2020-04-21 15:43:34 223

原创 Android 功能篇之 多行Item 解决单选问题

前提:如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是Android的RadioButton是一般是放在RadioGroup中进行管理的,而RadioGroup又是线性布局,即单行有效,多行无效。如图那种就需要两个RadioGroup来进行合作。那么如果进行合作呢?效果如下分析:RadioGroup多行显示其实就是两个RadioGroup进行切换,使用Ra...

2020-04-21 13:17:54 291

原创 Android 实现抖音头像底部弹框效果

布局文件activity_test.xml<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_...

2020-04-20 21:12:17 673

原创 音视频之最新超详细VMware虚拟机下载与安装

VMware下载与安装一、虚拟机的下载1.进入VMware官网,点击左侧导航栏中的下载,再点击图中标记的Workstation Pro,如下图所示。2.根据操作系统选择合适的产品,在这里以Windows系统为例,点击转至下载,如下图所示。3.在1处可以选择版本,默认为最新版本。选择好版本后点击立即下载,下载速度很慢的话,建议科学上网。二、虚拟机的安装1.打开.exe文件, 即可开...

2020-04-20 09:51:30 420

原创 Android NDK各版本下载

翻不了墙的话,可以用迅雷下载最新版本r21https://dl.google.com/android/repository/android-ndk-r21-windows-x86_64.ziphttps://dl.google.com/android/repository/android-ndk-r21-darwin-x86_64.ziphttps://dl.google.com/andr...

2020-04-19 20:27:49 3258

原创 Windows 10 安装 FFmpeg 并设置环境变量

下载 FFmpeg下载地址:解压放置将下载的压缩包解压获得 ffmpeg-4.0.2-win64-static 文件夹,将其重命名为 ffmpeg将 ffmpeg 文件夹放置到程序文件夹,假设放置路径为:D:\Program Files打开环境变量设置页:资源管理器 > 此电脑 > 右键-属性 > 高级系统设置 > 环境变量双击 Path 项进入编辑页选择...

2020-04-19 17:47:13 2433

原创 手把手教你搭建ffmpeg命令行运行环境

做音视频开发的时候我们通常会遇到各种奇奇怪怪的问题:咦,同样的视频怎么在Android上能正常播放在iOS上却不能播放了呢?咦,怎么这个视频在电脑上能播放,在手机上只有声音没用画面啊?等等等莫名其妙的问题。这时候我们该怎么办,怎么定位问题呢?到底是视频的问题还是我播放的问题啊?这个时候ffmpeg命令行工具可能就帮到你了。ffmpeg能干什么通常所说的ffmpeg命令行工具主要是以下三个...

2020-04-19 17:38:54 1549 1

原创 Android线程池原理详解

简介但凡有点开发经验的同学都知道,频繁的创建和销毁线程是会给系统带来比较大的性能开销的。所以线程池就营运而生了。那么使用线程池有什么好处呢?降低资源消耗可以重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行...

2020-04-19 15:10:18 542

原创 深入理解synchronized关键字

synchronized是如何实现同步的synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的。而锁的机制是如何实现同步的呢?这主要是因为锁的以下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁...

2020-04-19 14:10:34 161

原创 Kotlin协程大法

协程是什么首先,我们来回忆一下什么是进程和线程。什么是进程进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间。直白地讲,进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。什么是线程线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。线程是比进程更小的能独立运行的基本单位,线程自己基本上不拥有...

2020-04-19 13:25:57 112

原创 Handler postDelayed的实现原理

问题描述Handler.postDelayed()的原理是如何保证延时执行的?扩展:这样实现的好处是什么?题目分析猜测一下以我们对Handler的了解,内部使用了Looper对消息队列进行循环获取执行,所以我们估计postDelayed()是Handler内部搞了一个定时器,定时器到了delayed的时间就把消息加入到消息队列中,让looper在循环获取到该消息并执行。真的是这样吗?...

2020-04-19 11:17:17 534

原创 获取android软键盘高度

SoftKeyBoardListener.javapublic class SoftKeyBoardListener { private View rootView;//activity的根视图 int rootViewVisibleHeight;//纪录根视图的显示高度 private OnSoftKeyBoardChangeListener onSoftKeyBoar...

2020-04-14 10:09:39 501

原创 JVM锁优化总结

最近研究学习了Java1.6对锁的优化技术,重点就是偏向锁,轻量级锁。如下是几种锁之间的状态转换,清晰明了:结合网上学习的资料,总结了一下自己对锁优化的理解,只有自己把问题重述明白了,才是真正的掌握了知识。Jvm锁优化的原理synchronized在1.6之前完全依赖操作系统底层互斥量来完成同步操作,每次调用都需要程序由用户态进入内核态,然后内核态回到用户态,两种态之间的进入进出需要进行...

2020-04-11 09:26:20 139

原创 【Android】判断前台窗口的方法

在进行framework开发的时候经常需要监听前台窗口,根据窗口的不同做不同的业务逻辑。常用的方法有两种:一. 获取栈顶activity二. 获取窗口Params方法一: 获取栈顶activity通过读取任务栈,获取topActivity。优点:可以获取当前topActivity的包名类型和其他信息。缺点:如果是非Activity窗口(如Dialog),则获取不到。//获取当前To...

2020-04-11 09:17:02 1177

原创 git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining

git clone时报RPC failed; curl 18 transfer closed with outstanding read data remaining 错误原因1:缓存区溢出解决方法:命令行输入git config http.postBuffer 524288000执行上面命令如果依旧clone失败,考虑可能原因2:网络下载速度缓慢解决方法:命令行输入git conf...

2020-04-10 21:06:41 101

原创 关于APP进程被杀死,极光推送收不到消息的解决办法

网上有的 说 在mainfest中给application设置这个属性android:persistent=”true”,说app杀不死,推送可以收到。 但亲测 并没有什么效果亲测一下方法 有效public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context...

2020-04-10 14:54:57 4175 1

原创 三分钟帮你集成极光推送——和那些你可能不知道的事

本文简介:本文前篇,可以帮助朋友们快速集成极光推送。本文后篇,是我自己项目实践的一些总结和心得,应该对读者们还是很有参考价值的,相信读完这篇文章,你会对极光推送有更加深入的理解,而不仅仅只是会集成而已。总之呢,集成第三方SDK,都不是很难的事情,仔细阅读文档,一步步来,遇到Bug,慢慢解决就行,实在解决不了,可以问问客服小哥哥或者小姐姐,重要的是,你得有着解决它的决心和耐心。《一》JPush S...

2020-04-10 14:41:43 586

原创 Handler消息篇--主线程向子线程发消息

一、简介:说说主线程向子线程发送消息,如果handler是在主线程中创建,那没什么好说的,主线程会自动创建Looper和MessageQueen,但是子线程却不会创建了,不多说,直接上代码public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivi...

2020-04-08 07:43:43 759

原创 通过代码示例来学习面向对象六大原则

或许有的掘友们发现了,在阅读 Android 系统底层源码或者开源框架源码时,发现内部大量的设计模式,如果你对设计模式不懂的话,那么阅读源码真的是寸步难行。那么这篇文章我们先来学习面向对象的六大原则,设计模式大概 23 种,后面我们一步一步来学习它。单一职责原则单一职责原则的英文名称是 Single Responsibility Principle ,缩写是 SRP 。 SRP 的定义是:就一...

2020-04-02 11:19:02 198

原创 设计模式 ( 二 ) 结合代码示例 + Android 源码中 Builder 来学习建造者模式

介绍Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程,该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和创建过程隔离开来。定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使用场景相同的方法,不同的执行顺序,产生不同的事件结果时。当初始化一个对象特别复杂,如参数多...

2020-04-02 10:49:08 131

原创 设计模式 (一) 通过理论 + 代码示例 + Android 源码中单例模式来学习单例

介绍单例模式是应用最为广泛的模式之一,也可能是很多入门或初级工程师唯一会使用的设计模式之吧,在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个实例类。有利于我们的调用,避免一个相同的类重复创建实例,比如一个网络请求,图片请求/下载,数据库操作等,如果频繁创建同一个相同对象的话,很消耗资源,因此,没有理由让它们构造多个实例。全局都需要使用这个功能的时候,避免重复...

2020-04-02 09:55:17 239

原创 从 setContentView 入口,全方位分析 LayoutInflater

LayoutInflater 介绍在 Android 中 LayoutInflater 是扮演着很重要的角色,很多时候我们忽略了它的重要性,因为它的重要性完 全被隐藏起来了,可以说是直接隐藏在了Activity , Fragment 等组件的光环之下了。from(mContext) 源码解析在 Android 系统中,我们经常以 Context 获取系统级别的服务,比如 AMS, ...

2020-04-02 09:53:52 147

原创 移动架构 (七) 人人都能看得懂的组件化框架模型

为什么要组件化?随着项目不断的迭代 , 代码越来越臃肿 , 人员也越来越多 , 同时在一个 module 中共同开发 , 首先来说维护成本极高 , 不易管理扩展 , 现在就有了模块化的思想 , 把模块之间共用的代码(网络框架, 图片框架, 异步框架, 日志框架, 显示小部件 View 等),不同的功能。抽取成单独的 core module 和多个功能 module 。这样每个人负责自己的 mo...

2020-04-01 10:12:14 257

原创 移动架构 (六) 轻量级进程间通信框架设计

概述现在多进程传递数据使用越来越广泛了,在 Android 中进程间通信提供了 文件 、AIDL 、Binder 、Messenger 、ContentProvider 、Socket 、MemoryFile 等,实际开发中使用最多的应该是 AIDL ,但是 AIDL 需要编写 aidl 文件,如果使用 AIDL 仅仅是为了传递数据, 那么 LYKProBus 是你不错的选择。YKProBus...

2020-04-01 09:34:36 456

空空如也

空空如也

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

TA关注的人

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