自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (5)
  • 收藏
  • 关注

原创 Tinker接入遇到的一些问题

先说一下AS的环境:classpath "com.android.tools.build:gradle:4.0.1"distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zipcompileSdkVersion 30targetSdkVersion 30问题一:No such property: variantConfiguration for class: com.android.

2020-12-29 15:47:49 500

原创 Kotlin方法无法自动生成注释

需要在AS中安装插件:BugKotlinDocument官网地址:https://plugins.jetbrains.com/plugin/9781-bugkotlindocument

2020-12-24 11:46:48 1011

原创 代理模式

一、定义代理模式是为其他对象提供一种代理以控制这个对象的访问,一般是不想直接访问某个对象或无法访问到时,可以通过一个代理对象间接访问。二、实现代理模式有两种:静态代理和动态代理,我们先来看下静态代理。这里我们以代驾为例,正常情况下我们可以自己开车,但喝了酒的情况下,就得找一个代驾了,否则将面临罚款扣分和吊销驾照等处罚。不管是自己开车或叫代驾,两者做的事情本质都相同,那就是开车。所以我们可以先定义委托对象与代理对象需要实现相同的接口。/** * 抽象主题类 */public i

2020-11-08 17:41:05 129

原创 装饰模式

一、定义装饰模式是动态的扩展对象的功能,它是继承关系的另一种替代方案,比继承更加灵活。二、实现这里以人穿衣服为例,首先抽象出一个Person类,它有一个dressed()方法。/** * 抽象组件类(Component) */public abstract class Person { //抽象方法 public abstract void dressed();}接着定义一个Person的具体实现类XiaoMing,同时重写了dressed()方法。/*

2020-11-07 17:03:56 101

原创 观察者模式

一、定义观察者模式是对象间一种一对多的依赖关系,当一个对象状态改变,所有依赖它的对象都会被通知。二、实现这里会用两种方式实现观察者模式,一种是自定义接口,另一种是使用Java已实现的接口,两种实现本质是一样的。1、自定义接口被观察者抽象类public class Subject { //定义一个观察者数组 private Vector<Observer> vector = new Vector<>(); //增加观察者 p

2020-10-29 07:48:14 1739 1

原创 单例模式

一、概述单例模式是在开发中经常使用到的设计模式,它能保证在JVM中只有一个实例存在。下面来看几种单例模式的写法。二、饿汉模式 //饿汉模式 private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; }

2020-10-21 08:33:27 90

原创 Android使用AudioRecord和AudioTrack完成音频的采集和播放以及使用MediaCodec完成硬编和硬解

一、概述音视频的学习在弄清楚了一些基本概念后,接下来就是要会使用系统提供的一些API,通过实际的应用能更好的帮助我们理解其中的原理。二、音频的采集这里我们使用AudioRecord,因为它更接近系统底层,灵活性也更高,能获取到原始的PCM数据。下面来看一下采集的流程:1)获取权限2)获取AudioRecord所需的缓冲区3)创建AudioRecord对象4)创建保存录制文件夹5)开始采集6)停止采集并释放AudioRecord对象1、获取权限<..

2020-07-11 20:04:31 1072 1

原创 音频基础知识

1、采样率(sample rate)采样就是把模拟信号转化为数字信号的过程;采样频率越高,音频质量越高,数量量也越大;采样频率不低于音频信号最高频率的两倍,就可以还原原始的声音;人耳能听到频率范围大约在20Hz~20kHz之间,所以为了保证声音不失真,采频率在40kHz以上;一个通过一秒钟的采样点数,常见的44.1kHz,表示一秒钟的采样数据是44100个。2、量化精...

2020-05-02 22:00:07 664

原创 Java多线程生产者和消费者实现

一、概述首先,我们需要明白生产者和消费者模型是为了解决多线程之间通信而产生的。其次,需要了解实现线程间通信用到了哪些知识点。先来看一张生产者和消费者模型图:这里有四个对象,一个是生产者,一个是消费者,一个是容器,最后还有一个是需要生产的商品,虽然在图上没有体现出来。刚开始容器里面没有商品,消费者等待,生产者开始生产,当容器里面有商品了,生产者通知消费者去消费,如果生产的速度比较快,容器...

2020-03-18 23:10:14 565

原创 Java同步之synchronized正确使用

一、概述讲到synchronized大家都知道这是为了解决多线程对同一个资源竞争导致问题而出现的,synchronized的使用分为同步方法和同步块,那么对于多线程的同步问题我们只需要在方法上或方法里面的代码块加入synchronized就可以了吗?我们如何提高synchronized的使用效率?对于这两个问题,我们通过买票的例子来讲解synchronized的正确用法。二、线程不安全...

2020-03-17 17:08:56 211 1

原创 Java线程状态以及如何创建和停止线程

一、概述对于多线程的定义,以及为何要使用多线程我想大家都很熟悉,这篇文章主要想梳理一下多线程的一些基础知识,以便我们能熟练掌握。二、线程的状态线程的状态主要有5种,它们分别是:创建状态、就绪状态、运行状态、阻塞状态和死亡状态。我们可以用足球比赛来比喻线程的5种状态。1、创建状态(入选名单)2、就绪状态(入场比赛)3、运行状态(带球奔跑)4、阻塞状态(被撞摔跤)5、死...

2020-03-15 12:03:44 231

原创 Android用户协议与隐私政策实现

一、概述根据法规,现在上架的应用都要在App启动的时候弹出用户协议和隐私政策相关的内容,以便告知用户在使用App过程中的一些注意事项之类的东西,如果App没有添加这个功能,则不允许上架。...

2020-03-10 10:13:58 16087 9

原创 Android消息机制分析

一、概述Android的消息机制主要指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。那么这三者之间是什么关系,如何运行的呢?想知道这些我们先来看下主线程是如何更新UI的。二、主线程更新UI平时在开发过程中会经常使用到handler来更新UI,但是很少会用到MessageQueue和Looper,那么handler是如何与这两者关联...

2020-01-14 21:59:17 138

原创 Android内存泄露分析

一、前言对于开发Android的小伙伴们来说,内存泄露(Memory leak)一定不陌生,内存泄露的本质就是new出来的对象放在堆中无法被GC回收,导致应用可用的内存越来越少。那么内存泄露会带来什么问题呢?轻度的内存泄露会使得App卡顿,严重的会导致内存溢出(Out of memory),进而引起App crash。既然内存泄露带来这么大的危害,那么我们应该要知道什么情况下会导致内存泄露,...

2019-12-31 23:21:00 181

原创 Java字符编码

一、概述首先要明白什么是字符编码这个问题,字符编码就是将我们人能认识的字符,比如:"a","b",“中”,“国”等变成计算机可以认识的字符,叫做字符编码。但是现在又有一个问题,我们依据什么转换规则,将人认识的字符编码成计算机认识的字符呢?这时我们就要来了解一下字符编码的发展过程了。二、字符编码的发展过程1、ASCII码我们都知道在计算机内部,所有信息都是用二进制表示,而具体哪些二进...

2019-12-02 00:23:07 270

原创 Android加载高清大图

一、概述我们在开发中会遇到需要显示高清大图的时候,如果直接将图片显示,会出现OOM的情况,接下来介绍两种加载大图的方式。二、有损压缩有损压缩的原理是在使用BitmapFactory.decodeResource获取Bitmap对象时,设置inSampleSize,默认不压缩这个值就是1,大于1表示压缩。那么在使用过程中具体设置多大呢?这里就需要有两个值来确定,第一个是图片的实际宽高,第...

2019-11-24 17:28:25 1028

原创 Android事件分发之View(三)

当事件由ViewGroup传递到View时,第一个调用的是View的dispatchTouchEvent方法,然后再进行分发,下面来看下源码: public boolean dispatchTouchEvent(MotionEvent event) { // If the event should be handled by accessibility focu...

2019-11-17 16:00:53 117

原创 Android事件分发之ViewGroup(二)

在上一篇我们讲了事件分发传递的顺序是从Activity到ViewGroup最后到View,本篇我们就来讲一下事件分发在ViewGroup中的传递过程,先来看源码: @Override public boolean dispatchTouchEvent(MotionEvent ev) { // Handle an initial down. if ...

2019-11-17 15:26:49 80

原创 Android事件分发机制之Activity(一)

Android事件分发机制的原理简单讲就是从用户点击屏幕开始,从屏幕上移动,最后抬起的过程,主要包括:按下(down)、移动(move)、抬起(up),将这些操作触发的事件交给具体的View处理的过程。事件分发包含的主要方法有:1、dispatchTouchEvent(进行事件分发)2、onInterceptTouchEvent(判断是否拦截事件,此方法只在ViewGroup中)3...

2019-11-16 12:01:11 212

原创 Android Canvas

一、简介Canvas即画布,在自定义View中常用到,它可以通过直接new Canvas()或者new Canvas(Bitmap bitmap)初始化,但我们在使用过程中更多的是通过onDraw(Canvas canvas)得到Canvas对象。我这里大概将Canvas的功能分为三类1、绘制各种形状或线条,有如下方法:drawARGB、drawARC、drawBitmap、dra...

2019-11-11 22:17:14 145

原创 Android View的绘制流程

前言:为什么我们要了解View的绘制流程?在回答这个问题前,想必大家都知道自定义View吧,如果将这两者联系起来,答案也就清楚了:了解View的基本绘制流程对我们自定义View是很有必要的。一、绘制入口View绘制的入口是在ViewRootImpl.java的performTraversals()方法中,主要代码如下:private void performTraversals() ...

2019-10-29 22:04:54 130

原创 Android如何定位混淆后代码错误行数

一、背景现在大多数app打包时都会做代码混淆,这样能增加代码的安全性,防止别人反编译。但同时也带来一个问题,如果代码报错了,我们无法准确的定位到哪个类多少行报的错误,下面介绍一下如何解决这个问题的方法。二、需要用到的工具1、SDK提供给我们的工具:proguardgui.sh,路径:sdk/tools/proguard/bin/,作用:通过此工具来还原错误行数2、app打包时生成的...

2019-07-15 10:54:36 3765

原创 解决Android Studio无法升级和更新SDK问题

最近用的Android Studio版本为3.0,想升级到最新的3.2.1,于是进行如下操作:上面截图是升级后的,请忽略版本号为3.2.1,升级前为3.0。当时点击Check Now无任何反应,点击左边Updates下面的Android SDK后也一直提示“Looking for updates”,后来想到之前升级SDK的时候改了系统的hosts文件,文件路径:/etc/hosts,于是打...

2019-01-07 22:23:21 5545

原创 Android属性动画

在Android 3.0之前,系统提供的动画有帧动画和补间动画,帧动画的原理就是将一些图片连续的播放出来,补间动画是对View进行操作包括AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation这四种动画方式。由于它们有一些局限性,比如:1、不具有交互性,当View执行完动画后,其响应事件依然停留在动画执行前的地方;2、只能在...

2018-11-10 22:18:31 151

原创 Android坐标系统

一、Android坐标系统1、Android系统中有两种坐标系统,一种是Android坐标系,另一种是View坐标系。二、Android坐标系1、是指以手机屏幕左上角为原点,从左到右为X轴的正方向,从上到下为Y轴的正方向。三、View坐标系1、View自身的坐标getTop():获取View自身顶边到父布局顶边的距离。getLeft():获取View自身左边到父布局左边...

2018-11-04 21:20:09 210

原创 Android帧动画和补间动画总结

一、Android动画的分类动画可以分为三种:帧动画、补间动画和属性动画,本文先讲前两种。二、帧动画帧动画的原理很简单,就是顺序播放一组预先定义好的图片。系统提供了一个类AnimationDrawable来使用帧动画,使用方法:在res/drawable通过xml来定义一个文件(frame_animation.xml)。如下所示:<?xml version="1.0" en...

2018-05-06 23:25:49 212

原创 Java for循环例子

一、打印直角三角形public static void rightTriangle() {// 控制行数for (inti = 1; i <= 5;i++) {// 控制每行显示的个数for (intj = 1; j <=i; j++) {System.out.print("*");}System.out.pr

2017-01-16 21:07:53 1084

原创 Java位运算

Java定义的位运算,应用于整数类型(int),长整型(long),短整型(short),字符型(char)和字节型(byte)等类型。计算原理是将上述类型转换成二进制数,然后再按位计算。假设a = 6;(二进制:0110)b = 2;(二进制:0010)一、操作符(&)1、原理:如果都是1则为1,否则为0a = 0110        b = 0010----

2017-01-11 15:34:18 210

原创 Dialog弹出后显示遮罩效果

在很多APP中经常见到打开一个弹框后整个屏幕的背景颜色变深了,那么这种效果怎么实现呢?/** * 设置背景透明度 * * @param bgAlpha */ private void backgroundAlpha(float bgAlpha) { WindowManager.LayoutParams lp = getWindo...

2016-12-06 10:28:10 6182

原创 工厂模式

一、概念简单工厂模式属于创建型模式,又叫做静态方法模式,简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例。二、用途如何去实例化一个合适的对象。三、核心有一个专门的类来负责创建实例的过程。四、原理1、抽象产品(Product)角色简单工厂模式所创建的所有对象的父类,定义所有实例对象的公共接口。2、具体产品(Concrete Product)

2016-08-02 12:01:39 278

原创 Android通过外部启动APP的三种方式

第一种:直接通过包名:Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.joyodream.jiji");startActivity(LaunchIntent);第二种:通过自定义的Action:Intent intent = new Intent();intent.se

2016-07-28 09:39:33 4216

原创 Android社会化分享

在Android开发中需要用到分享功能,在网上找了一些对比,最后决定用友盟的分享功能,下面大概记录下步骤。一、第三方账号申请及绑定比如要分享到新浪微博平台上,首先需要在新浪微博上注册并绑定账号,否则无法通过分享。具体如何操作请参考:点击打开链接二、下载最新SDK并导入项目工程1、添加jar包sdk libs里面有很多jar包,根据自己需要分享到哪些平台添加相应的jar包。

2016-02-23 14:49:03 338

原创 为多屏幕设计

从小屏到大屏,Android拥有数百种不同屏幕尺寸,相同的屏幕尺寸也有很多种不同的屏幕密度。因此,设计兼容不同屏幕尺寸的应用程序满足不同的用户体验显得十分重要。一、兼容不同的屏幕大小1、使用"wrap_content"和"match_parent"2、使用相对布局3、使用尺寸限定词ScreenMatch4、使用.9.png图片这里着重讲一下如何使用ScreenMatch来生...

2016-02-17 10:10:38 328

原创 OTA升级

一、生成完整OTA zip包(无需先编译)1、sourcebuild/envsetup.sh2、lunch 5(后面数字根据所编译项目文件位置决定)3、extract-bsp(没有内核相关文件则不执行此命令)4、make -j165、get_uboot6、pack7、maketarget-files-package8、./build/tools/releasetoo

2016-01-26 14:14:07 1185

原创 Ubuntu新增硬盘大小

一、配置新增硬盘1、在Ubuntu光机情况下操作2、在顶部菜单栏中选中:虚拟机--》设置--》硬件,在底部选中:添加--》硬盘--》下一步--》下一步--》下一步--》(最大磁盘大小选择新硬盘的大小)下一步--》完成这样在硬件设备里面就新增了一个硬盘2二、进入虚拟机,挂载新硬盘1、启动Ubuntu,root用户登录。在终端输入:fdisk -l ,可以看到---------...

2016-01-20 11:33:36 578

原创 Android生成二维码

说到二维码大家都不陌生,大街小巷都可以看到带有二维码的广告,我们只要通过手机扫描一下就可以读取到二维码包含的信息,非常便捷。在Android开发中我们也经常会使用到二维码,今天主要讲一下Android怎么生成二维码?在讲怎么生成之前需要提到一个jar包,core.jar,生成二维码基本上就是靠这个jar包。一、生成普通二维码什么是普通的二维码?有时候我们看到的二维码会包含一

2016-01-11 15:33:19 478

com.github.android.apk

Github App

2021-04-15

Android属性动画Demo

Android属性动画Demo,包括自定义一些高级的动画效果。

2018-11-10

Android帧动画和补间动画总结

Android帧动画和补间动画总结,帧动画和补间动画代码实现。

2018-05-07

Android源码下载repo文件

下载Android源码的repo文件

2016-05-18

Android生成二维码

此Demo介绍了生成普通的二维码和生成带图片logo的二维码两种方法。

2016-01-12

空空如也

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

TA关注的人

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