- 博客(144)
- 资源 (4)
- 收藏
- 关注
原创 Android studio之编译提示Could not find :umeng-asms-v1.2.1
只要提示这种Could not find :可能arr包没有引入正确,可能少了dirs。我的是gradle 8.0,在setting gradle文件添加代码。
2024-07-09 15:58:03
354
原创 Android Constant expression required (case R.id.xxx)
gradle更新到8.0后,遇到了这个报错。
2024-07-09 15:00:06
451
原创 AdMob Error:AAPT: error: unexpected element <property> found in <manifest><application>
(1)下载Gradle 6.7.1版本,替换Unity引擎D:\Unity3D\2021.3.9f1\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle目录下的lib文件夹。(3) 修改classpath ‘com.android.tools.build:gradle:4.2.1’ Gradle插件版本。Android Gradle插件版本与Unity Gradle版本对应关系 Android官网。2、升级Max至最新版本。
2024-07-08 09:49:14
347
原创 新版Android Studio中设置gradle的JDK版本
某次更新后发现SDK location下找不到Gradle Setting选项了,需要在File-Settings-Build,Execution,Deployment-Build Tools-Gradle中设置。在旧版(具体哪个版本号之前搞不清了)中设置JDK版本在>File——>Project Structure——>SDK location——>Gradle Setting——>Gradle SDK。旧版android studio。新版android studio。
2024-07-08 09:43:10
3214
原创 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
1649
原创 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
4537
原创 Java Interrupt、IsInterrupted、Interrupted
IsInterrupted不会重置interrupt stateInterrupted会重置interrupt state
2021-06-23 11:36:02
173
原创 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
508
原创 字体属性及测量 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
434
1
原创 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
6487
原创 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
1750
原创 Android 四种启动模式
1. Standard 标准模式说明:Android创建Activity时的默认模式,假设没有为Activity设置启动模式的话,默觉得标准模式。每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。生命周期:如上所看到的,每次被创建的实例Activity 的生命周期符合典型情况,它的onCreate、onStart、onResume都会被调用。举例:此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard 模式...
2021-04-17 16:16:27
1188
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
257
原创 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
4563
原创 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
119
原创 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
2340
原创 Java semaphore的讲解和使用
Semaphore的作用:限制线程并发的数量课外话题【多线程的同步概念】:其实就是排着队去执行一个任务,执行任务是一个一个的执行,这样的优点是有助于程序逻辑的正确性,不会出现非线程安全问题,保证人系统功能的运行稳定。Semaphore类结构图:1、类Semaphore的构造函数permits 是许可的意思,代表同一时间,最多允许permits执行acquire() 和release() 之间的代码。例如:Semaphore semaphore = new Semaphore(1);表示同一时
2020-12-17 17:33:12
668
原创 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
1203
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
182
原创 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
463
原创 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
134
原创 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
214
原创 组合模式和泛型模式
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
287
原创 泛型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
212
原创 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
182
原创 Java 类加载规则
如果多个package内含有同名的类,匹配加载的顺序是如下1、当前类是否含有此名称的内部类。如果有,则加载该内部类,否则下一步2、当前类所属java文件中的import是否指明此名称的类。如果有,则加载该import类,否则下一步。注意:import必须明确指明,不能含有通配符*3、当前包中是否含有此名称的类。如果有,则加载该名称的类,否则下一步4、import package.*...
2020-04-15 13:32:31
300
原创 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
263
原创 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
211
原创 Java 移位操作符讲解
Java移位操作符分为三种:左移位操作符(<<)、有符号右移位操作符(>>)、无符号右移位操作符(>>>)1、如果对char、byte、short类型的数值进行移位操作,那么在移位之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值2、对于int类型数值进行移位操作,移位数的低5位才是有效的,这样可防移位超过int类型所具有的位数(...
2020-04-11 15:39:06
260
原创 单例模式的双重锁为什么要加volatile
单例模式的双重锁为什么要加volatile需要volatile关键字的原因是,在并发情况下,如果没有volatile关键字,在第5行会出现问题。instance = new TestInstance();可以分解为3行伪代码a.memory = allocate() //分配内存b. ctorInstanc(memory) //初始化对象c. instance = memory ...
2020-03-29 15:45:46
529
原创 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
349
原创 红黑树 讲解
如果一颗二叉查找树,满足下面的红黑性质,则为一颗红黑树:1、每个结点要么是红的要么是黑的2、根结点是黑的3、每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的4、如果一个结点是红的,那么它的两个孩子都是黑的5、 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点...
2020-03-03 14:16:44
368
原创 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
515
原创 二叉树 讲解
二叉树定义二叉树是n(n>=0)个结点的有限集合,该集合可能为空集(称为空二叉树),也可能由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。二叉树特点由二叉树定义以及图示分析得出二叉树有以下特点:1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。2)左子树和右子树是有顺序的,次序不能任意颠倒。3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子...
2020-02-23 20:32:42
215
原创 Android 事件分发机制 讲解
1、分发事件的组件分发事件的组件,也称为分发事件者,包括Activity、ViewGroup和View。它们三者的一般结构为:从上图中可以看出,Activity包括了ViewGroup,ViewGroup又可以包含多个View。2、分发的核心方法负责对事件进行分发的方法主要有下面几个:dispatchTouchEvent()onInterceptTouchEvent()onTouc...
2020-02-20 16:28:18
247
原创 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
803
原创 Android Studio如何导入swiperefreshlayout
SwipeRefreshLayout以前在v4包里,现在改到了androidx1、添加SwipeRefreshLayout1、File -> Project Structure 打开Project Structure界面2、Dependencies -> app -> +
2020-02-17 17:00:17
3176
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
276
原创 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
229
Android自定义组件开发详解.docx
2020-01-04
OpenGL ES 3.x 游戏开发
2017-10-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人