自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(140)
  • 资源 (4)
  • 收藏
  • 关注

原创 java.lang.IllegalStateException:Failed to build unique file: /storage/emulated/0/...

java.lang.IllegalStateException:Failed to build unique file: /storage/emulated/0/...

2022-11-07 14:42:54 1233 1

原创 安卓aab包安装方式

安卓aab包安装方式

2022-11-07 09:31:29 2630

原创 ReentrantLock里面lock和tryLock的区别

ReentrantLockReentrantLock(轻量级锁)也可以叫对象锁,可重入锁,互斥锁。synchronized重量级锁,JDK前期的版本lock比synchronized更快,在JDK1.5之后synchronized引入了偏向锁,轻量级锁和重量级锁。以致两种锁性能旗鼓相当,看个人喜欢,本文主要介绍一下lock和tryLock的区别。public void lock() { sync.lock();}public void lockInterruptibly() thro

2021-06-24 14:56:59 3910

原创 Java Interrupt、IsInterrupted、Interrupted

IsInterrupted不会重置interrupt stateInterrupted会重置interrupt state

2021-06-23 11:36:02 123

原创 SharedPreferences.Editor中commit()和applay()的区别

在使用Lint检查代码时,得到提示Consider using apply() instead; commit writes its data to persistent storage immediately, whereas apply will handle it in the background通过阅读文档得知只要区别在于:commit() API Level 1。apply() API Level 9。 commit()有boolean返回值,确认是否写入数据成功。applay(

2021-04-30 09:55:41 428

原创 字体属性及测量 FontMetrics

最近的一个模块正好用到字体的相关内容,整理出来。(一) 字体的几个参数 ,以Android API文档定义为准,见下图要点如下:1. 基准点是baseline2. Ascent是baseline之上至字符最高处的距离3. Descent是baseline之下至字符最低处的距离4. Leading文档说的很含糊,其实是上一行字符的descent到下一行的ascent之间的距离5. Top指的是指的是最高字符到baseline的值,即ascent的最大值6. 同上,botto

2021-04-26 08:18:29 282

原创 Android LinearGradient线性渐变

1 linearGradient简介linearGradient线性渐变,会用到Paint的setShader,Shader 被称为着色器,在opengl中这个概念经常被用到,android中的shader主要用来给图像、文字着色,Shader在绘制过程中会返回横向重要的颜色组,Paint设置shader后,绘制时会从shader中获取颜色,也就是需要shader告诉画笔某处的颜色值。Shader 具体实现类包括:BitmapShader,ComposeShader,LinearGradient,

2021-04-19 11:35:02 5472

原创 Activity 跳转的生命周期变化

1)Activity1跳转到Activity2的生命周期流程 1.Activity1启动: Activity1: onCreate() Activity1: onStart() Activity1: onResume() 2.点击按钮跳转到Activity2: Activity1: onPause() Activity2: onCreate() Activity2: onStart() Activity2: onR

2021-04-18 08:55:16 1397

原创 Android 四种启动模式

1. Standard 标准模式说明:Android创建Activity时的默认模式,假设没有为Activity设置启动模式的话,默觉得标准模式。每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。生命周期:如上所看到的,每次被创建的实例Activity 的生命周期符合典型情况,它的onCreate、onStart、onResume都会被调用。举例:此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard 模式...

2021-04-17 16:16:27 864 1

原创 Java 异常丢失

public class AException extends Exception{ public String toString(){ return "A"; }}public class BException extends Exception{ public String toString(){ return "B"; }}public class Test { public static void fun(){ try{ try{...

2021-04-14 16:26:54 195

原创 Set判断元素是否已存在的条件

1、判断变量是否存在相同的引用,如果引用相同,则不再判断hashcode、equals,并且认为已存在该元素,无法添加元素2、如果指向不同的引用,则判断hashcode和equals是否一样,同时一样则认为已存在。package p1;import java.util.HashSet;public class A { public static void main(String[] args) { A1 a1 = new A1(); A1 a...

2021-04-13 11:11:11 4251

原创 2021-04-12

package p1;public class A { public static void main(String[] args) { test1(100); //long } public static void test1(Integer i) { System.out.println("Integer"); } public static void test1(long i) { ...

2021-04-12 09:47:21 73

原创 Android各国语言和Values文件夹命名规则

Android各国语言缩写ar 阿拉伯文ar_AE 阿拉伯文 (阿拉伯联合酋长国)ar_BH 阿拉伯文 (巴林)ar_DZ 阿拉伯文 (阿尔及利亚)ar_EG 阿拉伯文 (埃及)ar_IQ 阿拉伯文 (伊拉克)ar_JO 阿拉伯文 (约旦)ar_KW 阿拉伯文 (科威特)ar_LB 阿拉伯文 (黎巴嫩)ar_LY 阿拉伯文 (利比亚)ar_MA 阿拉伯文 (摩洛哥)ar_OM 阿拉伯文 (阿曼)ar_QA 阿拉伯文 (卡塔尔)ar_SA 阿拉伯文 (沙特阿拉伯)ar_SD 阿拉

2021-01-01 21:10:02 1731

原创 Java semaphore的讲解和使用

Semaphore的作用:限制线程并发的数量课外话题【多线程的同步概念】:其实就是排着队去执行一个任务,执行任务是一个一个的执行,这样的优点是有助于程序逻辑的正确性,不会出现非线程安全问题,保证人系统功能的运行稳定。Semaphore类结构图:1、类Semaphore的构造函数permits 是许可的意思,代表同一时间,最多允许permits执行acquire() 和release() 之间的代码。例如:Semaphore semaphore = new Semaphore(1);表示同一时

2020-12-17 17:33:12 533

原创 Java ReentrantLock中tryLock与lock的区别(非公平锁与公平锁)

设置同步状态,利用CAS操作// CAS操作:如果当前状态值等于期望值,则自动将同步状态设置为给定的更新值protected final boolean compareAndSetState(int expect, int update)进入tryLock,实际上是非公平锁的实现(非公平锁: 不能保证正在排队的线程能拿到锁,因为可能被新来的线程抢走)public boolean tryLock() { return sync.nonfairTryAcquire(1);}final b

2020-12-16 10:38:25 1034 1

原创 Java notify和notifyAll的区别

notify1、通知一个处于wait状态的线程进入block状态,此线程必须是和该对象相关联(同步)notifyAll1、通知所有处于wait状态的线程进入block状态,此线程必须是和该对象相关联(同步)测试用例:package p1;public class A { public static void main(String[] args) { A1 a1 = new A1(); Runnable1 runnable1 = new Runnable1(a1); Thread

2020-12-16 09:29:12 132

原创 Java自限定类型(Self-Bound Types)

引入Java的泛型中有一种比较特殊的用法:class SelfBounded<T extends SelfBounded<T>>{}网上的其他博客说得不是很详细,所以在这里记录一下。先看一个简单的例子(Thinking In Java 4th Edition P500,做了些修改)class BasicHolder<T> { int No; T element; void set(T arg) { element = arg; } T get() { r

2020-11-23 19:25:37 344

原创 Java常量池

字符常量池和自动包装package p1;public class I { public static void main(String[] args) { char c1 = new Character('a'); char c2 = new Character('a'); System.out.println(c1 == c2); Character c3 = new Character('a'); Character c4 = new Character('a');

2020-09-03 11:39:38 97

原创 Java 多线程协作 - 同步问题

一、Thread类的几种状态public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;}二、Wait(), Notify() , NotifyAll()的使用package p1;public class A { public static void main(String[] args) { Car car = new Car();

2020-08-19 20:19:29 177

原创 组合模式和泛型模式

package p1;public class B { public static void main(String[] args) { Holder1<? extends Fruit> h1 = new Holder1<Apple>(); h1.set(new Fruit()); // 编译报错 Fruit f1 = h1.get(); Holder1<? super Fruit> h2 = new Holder1<Fruit>

2020-08-10 12:03:54 222

原创 泛型Set问题

package p1;public class B {public static void main(String[] args) {Holder<? extends Fruit> holder = new Holder();holder.set(new Fruit()); // 报错}}class Holder {private T value;public void set(T val) { value = val;}public T get() { ret

2020-08-10 11:26:46 163

原创 Java 容器学习

问题:如何删除List中值为3的整数倍数的对象package p3;import java.util.ArrayList;import java.util.List;public class B { public static void main(String[] args) { List<Integer> list = new ArrayList<Inte...

2020-04-17 16:19:57 137

原创 Java 类加载规则

如果多个package内含有同名的类,匹配加载的顺序是如下1、当前类是否含有此名称的内部类。如果有,则加载该内部类,否则下一步2、当前类所属java文件中的import是否指明此名称的类。如果有,则加载该import类,否则下一步。注意:import必须明确指明,不能含有通配符*3、当前包中是否含有此名称的类。如果有,则加载该名称的类,否则下一步4、import package.*...

2020-04-15 13:32:31 233

原创 Java 经典测试题

题目1:L.java文件的代码如下所示,运行结果是()package p1;public class L { public static void main(String[] args) { L1 l1 = new L2(); }}class L1 { int value = 1; L1() { test1();...

2020-04-14 15:21:55 196

原创 Java 可变参数列表

Java SE5引入了可变参数列表特性,使用的时候需要注意一些细节 void test(String... args) { if(args == null) { System.out.println("args is null"); } else { System.out.println("args not null, lenght is " + args.length)...

2020-04-12 13:47:39 174

原创 Java 移位操作符讲解

Java移位操作符分为三种:左移位操作符(<<)、有符号右移位操作符(>>)、无符号右移位操作符(>>>)1、如果对char、byte、short类型的数值进行移位操作,那么在移位之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值2、对于int类型数值进行移位操作,移位数的低5位才是有效的,这样可防移位超过int类型所具有的位数(...

2020-04-11 15:39:06 208

原创 单例模式的双重锁为什么要加volatile

单例模式的双重锁为什么要加volatile需要volatile关键字的原因是,在并发情况下,如果没有volatile关键字,在第5行会出现问题。instance = new TestInstance();可以分解为3行伪代码a.memory = allocate() //分配内存b. ctorInstanc(memory) //初始化对象c. instance = memory ...

2020-03-29 15:45:46 374

原创 Android 全屏 隐藏虚拟菜单

应实际工作需要:实现App全屏并且隐藏虚拟菜单,解决办法:View decorView = getWindow().getDecorView();int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;...

2020-03-06 16:03:08 278

原创 红黑树 讲解

如果一颗二叉查找树,满足下面的红黑性质,则为一颗红黑树:1、每个结点要么是红的要么是黑的2、根结点是黑的3、每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的4、如果一个结点是红的,那么它的两个孩子都是黑的5、 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点...

2020-03-03 14:16:44 286

原创 Java 方法参数 讲解

Java参数:不管是原始类型还是引用类型,传递的都是副本若参数类型是基本数据类型,那么传过来的就是这个参数的一个副本package p1;public class E { public static void main(String[] args) { int value = 10; test1(value); System.out.println(value); }...

2020-02-23 20:54:31 388

原创 二叉树 讲解

二叉树定义二叉树是n(n>=0)个结点的有限集合,该集合可能为空集(称为空二叉树),也可能由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。二叉树特点由二叉树定义以及图示分析得出二叉树有以下特点:1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。2)左子树和右子树是有顺序的,次序不能任意颠倒。3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子...

2020-02-23 20:32:42 168

原创 Android 事件分发机制 讲解

1、分发事件的组件分发事件的组件,也称为分发事件者,包括Activity、ViewGroup和View。它们三者的一般结构为:从上图中可以看出,Activity包括了ViewGroup,ViewGroup又可以包含多个View。2、分发的核心方法负责对事件进行分发的方法主要有下面几个:dispatchTouchEvent()onInterceptTouchEvent()onTouc...

2020-02-20 16:28:18 192

原创 Android 判断手机的Rom类型

1、判断手机的Rom类型public class OSUtils { public static final String ROM_MIUI = "MIUI"; public static final String ROM_EMUI = "EMUI"; public static final String ROM_FLYME = "FLYME"; public s...

2020-02-17 21:22:02 693

原创 Android Studio如何导入swiperefreshlayout

SwipeRefreshLayout以前在v4包里,现在改到了androidx1、添加SwipeRefreshLayout1、File -> Project Structure 打开Project Structure界面2、Dependencies -> app -> +

2020-02-17 17:00:17 2969 1

原创 Gson解析

1、解析ObjectGson gson = new Gson();gson.fromJson(jsonString, Object.class);2、解析Object数组Gson gson = new Gson();gson.fromJson(jsonString, Object[].class);3、解析Object容器Gson gson = new Gson();gson....

2020-02-16 16:58:55 208

原创 Xml解析之Pull、SAX(非泛型方式)

Pull方式解析Xml例子:String mData = "<apps>\n" + "<app>\n" + "<id>1</id>\n" + "<name>Google Maps</name>\n" + "<version&...

2020-02-16 14:29:29 178

原创 Android 调用系统相册

启动相册 private void openAlbum() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, CHOOSE_PHOTO); }获取相册返...

2020-02-15 16:37:40 544

原创 MediaStore.ACTION_IMAGE_CAPTURE注意事项

Android自4.4(Api 19)开始,读写应用自身的文件已经不需要读写SD卡权限了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>我在测试调用摄像头拍照截图返回功能时,发现一些问题(自己暂时还不能理解),在此记录一下,如果有人知道原因,请留言告诉我一下1、android....

2020-02-15 09:55:22 4818 1

原创 Android 存储目录详解

1、内部存储和外部存储这里的存储指的是永久非易失的存储(rom),不是内存(ram)。这里的外部存储不是指特定的可移动的存储介质(如SD卡),现在很多Android手机都是一体机,普通消费者无法拆卸的,也没有扩展SD卡的的卡槽了,我们把手机本身自带的rom叫机身存储或内置存储。现在的Android设备都将机身存储划分了内部存储和外部存储,体现内部和外部的区别。如果可扩展可移动存储(如SD卡),...

2020-02-14 14:22:41 665

原创 INSTALL_FAILED_TEST_ONLY解决方法

今天直接运行、安装到手机上,发现安装失败(adb install同样失败),提示INSTALL_FAILED_TEST_ONLY,原来是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性➜ apk adb install '/home/silver/桌面/share/apk/a...

2020-02-13 19:24:57 10893

Android自定义组件开发详解.docx

Android自定义组件开发详解,让你彻底理解自定义组件(自定义View、ViewGroup等,彻底了解canvas和paint的基本和高级使用方法)

2020-01-04

OpenGL ES 3.x 游戏开发

OpenGL ES 3.x 游戏开发 吴亚峰 编著 第1章 Android概述 第2章 游戏开发相关的 Android基础知识 第3章 初识OpenGL ES 3.x  第4章 着色语言Shading Language 第5章 必知必会的3D开发知识—投影及各种变换 第6章 光照 第7章 纹理映射 第8章 3D基本形状的构建 第9章 更逼真的游戏场景——3D模型加载 第10章 独特的场景渲染技术——混合与雾 第11章 常用的3D开发技巧——标志板、天空盒、镜像绘制等 第12章 渲染出更加酷炫的3D场景——几种剪裁与测试 第13章 引人入胜的游戏特性— 传感器应用开发

2017-10-13

BorePlugin-master(Layout Creator)

根据Layout布局文件id自动生成相应的控件(减少工作量,提高工作效率)

2016-03-24

Android多屏幕适配及样式-设计开发指导书

最专业的Android多屏幕适配及样式-设计开发指导书

2015-07-27

空空如也

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

TA关注的人

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