- 博客(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
原创 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
2020-01-04
OpenGL ES 3.x 游戏开发
2017-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人