自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 rk 3326 Android12 蓝牙遥控器新增键值

按照指令提示我们更新下api,执行make api-stubs-docs-update-current-api后,再编译顺利通过,可以正常使用识别蓝牙的键值。一般键值的逻辑处理在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java。添加后打开frameworks/base/core/java/android/view/KeyEvent.java。添加刚才需要定义的常量。

2024-01-22 17:58:04 516

原创 Android开发基础——简单实现Fragment和Activity的通信

Fragment在我们的安卓开发中算是非常常见,像我们的底部状态栏里的各个按钮,当我们点击他的时候,总是能在同一个位置显示不同的页面。而每一个页面都可以理解为一个Fragment(碎片),那么每一个碎片又是如何做到和外部Activity通信的?其实实现通信的这一个过程也相对简单:我们只需要一个接口,用来描述通信的返回操作。如下例子:先实现一个接口:里面就只有一个方法用来设置Textview的文本。在我们的Fragment里面实现我们的接口,再用获得我们的碎片的view,然后用这个view获得碎片里面

2021-09-08 15:26:28 218

原创 ListView的增强版RecyclerView

ListView由于其强大的功能,在过去的Android开发中可以说是贡献卓越,直达今天依然还有很多的程序在继续使用着ListView。但是ListViewd性能其实不是很好,而且扩展性差,它只能实现数据纵向滚动的效果,如果我们想实现横向滚动的话,ListView是做不到的。于是,Android提供了一个更强大的滚动控件——RecyclerView.可以说是一个增强版的ListView,不仅可以实现和ListView同样的效果,还优化了ListView中存在的各种不足之处。我们来看一下RecyclerVie

2021-07-30 14:47:35 167

原创 使用Intent在活动之间穿梭

我们可以使用Intent来实现activity与activity的跳转,还可以给intent携带数据过去,那么如何实现事件返回原来那个activity并携带数据,方法如下:第一个activity:Intent intent=new Intent("android.intent.category.TABo"); intent.putExtra("test","999"); Log.d("测试","准备跳转");//常规跳转activity

2021-07-29 11:35:58 112

原创 Android Studio入门之真机调试

用Android Studio做出的应用放在真机测试其实可以更好的看出我们的应用的缺陷。然后很多小伙伴可能就是对如何启动真机调试还是一脸懵逼。现在我演示一种百分百能成功连接真机的方法。1.打开我们的SDK Manager,点击SDK Tools,下载Googel Usb Driver.记住我们的驱动的保存地址(一般是下载到sdk文件夹的extras文件夹里面),如图,2.到那个extras文件夹里面找到usb的文件夹地址复制一下3.打开我们手机的usb调试功能,允许计算机连接我们的手机,记得选择传输

2021-07-27 10:20:08 2453

原创 Android Studio实现AIDL的配置及使用

Android Studio在实现AIPL的过程还是挺方便的,举个例子现在我们需要用AIPL 实现一个例如服务器和客户端的效果(服务端主要处理一些逻辑,例如计算两个数之和)。首先我们需要先生成一个AIPL文件,然后在文件里面写我们要暴露出去的接口方法,因为AS不会自动帮我们编译,所以我们需要自己去编译项目,然后AS就会帮我们生成一个AIDL的接口文件,接着我们开始写我们的服务,第一步:新建一个服务类继承Service,重写IBinder方法,返回一个ibinder对象。然后我们需要初始化IBinder,可以

2021-07-25 01:57:19 899 1

原创 java面试必备

arraylist和linklist的区别:arraylist是基于动态数组,方便查询,可以按下标查。正常情况下对增删元素的性能不如linklistlinklist是基于链表,方便增删,但由于在插入大量数据的时候会创建很多个节点,如果arraylist也是用了尾插法去增加元素的话,其实arraylist的效率还是可以的。hashcode和equal:hashcode返回一个hash值,equal则是比较值或者对象是不是同一个,例子:hashset:set不允许元素重复无序,所以需要先用hashcod

2021-07-20 16:41:53 104

原创 JUC的异步回调——CompletableFuture

在juc里面有一个神奇的类—— CompletableFuture,他就像AJAX一样可以实现异步回调,可以设置有无返回结果。具体操作如下: //无返回结果 CompletableFuture<Void> completableFuture=CompletableFuture.runAsync(()->{ try { TimeUnit.SECONDS.sleep(2); } catch

2021-06-19 15:29:38 150

原创 程序员必备的四大函数式接口

1.函数型接口传入一个参数,返回一个参数,例如: Function function=str->{ return str ; }; System.out.println(function.apply("Function函数型接口"));2.断定型接口:返回一个布尔值,例如:Predicate<String> predicate=(str)->{ return str.isEmpty();

2021-06-17 20:02:33 182

原创 7大参数自定义线程池

在实际开发中,经常会用到的就是自定义线程池,通过new ThreadPoolExecutor(…),并添加需要的参数和设置需要的值,以下是7大参数的使用方法:1.corePoolSize:设置核心线程数量。2.maximumPoolSize:设置最大的线程数(当线程数达到此值时就会触发)。3.keepAliveTime:超时等待时长(当没有空闲的线程时且超过这个值的时间,就会自动关闭线程池允许的最大线程数,恢复到默认的核心线程数量)。4.TimeUnit unit:设置keepAliveTime的时

2021-06-16 18:08:13 1079

原创 三种线程池newSingleThreadExecutor,newFixedThreadPool,newCachedThreadPool

在实际工作中传统的创建线程方法是很浪费资源的,因为要创建线程,然后还要销毁线程,如果线程量太多的话,对于程序的响应速度会有比较大的影响,而利用线程池去创建线程的话,是能够有效的优化我们程序的运行速度。线程池比较常用的有三种,具体用法如下:第一种:...

2021-06-15 20:02:53 308

原创 Blokingqueue的四组api

Blokingqueue有四组api都可以对元素进行添加和移除,但还是有不一样的地方。具体用法如下代码: //1.会抛出异常 void test1(){ ArrayBlockingQueue blockingQueue=new ArrayBlockingQueue(3); System.out.println(blockingQueue.add("a")); System.out.println(blockingQueue.add("b"));

2021-06-15 16:56:11 71

原创 读写锁(ReadWriteLock)的使用

我们知道在执行写操作时是不允许有其他线程插入,而读操作则可以允许一起读。写锁又称为独占锁,读锁又称为共享锁。用法:ReadWriteLock readWriteLock=new ReentrantReadWriteLock();//声明读写锁 readWriteLock.writeLock().lock();//声明写锁 readWriteLock.writeLock().unlock();//声明写锁解锁 readWriteLock.readLock().lock();//声明读锁

2021-06-15 15:43:01 417

原创 高并发常用辅助类

1.CountDownLatch减法计时器用法:CountDownLatch countDownLatch=new CountDownLatch(10);//设置十个线程进行,并开始倒计时,等待归零并执行下一步操作。countDownLatch.await();//等待归零2.CyclicBarrier加法计时器用法: CyclicBarrier barrier=new CyclicBarrier(7,()->{ System.out.println("吃完了!"

2021-06-15 14:08:37 81

原创 Callable的使用

在jdk官方文档是这样对Callable介绍:返回结果的一个任务,并可能抛出异常。用户定义一个不带参数调用 call的Callable接口类似于Runnable,,是专为其实例的类可能被另一个线程执行。然而,Runnable,不返回结果并不能抛出异常。Executors类包含的实用方法与其他常见的形式转换为Callable类。使用方法其实也挺简单,如下代码:public class Day5 { public static void main(String[] args) throws Ex

2021-05-29 15:18:50 594

原创 集合类不安全的解决方案

像一些如list、set、map集合类 在多线程的场景下是不安全的,对此有三种常见的解决方案:1、List<String> list= new Vector<>();Set<String> set= new Vector<>();Set<String> set= new Vector<>();2、 List<String> list= Collections.synchronizedList(ne

2021-05-29 14:50:07 90

原创 八锁现象彻底理解解锁

第一个问题:假设有一个对象调用两个线程,请问这两个线程的执行顺序?根据这个问题我们先上一段代码:import java.util.concurrent.TimeUnit;public class Day3 { public static void main(String[] args) { Phone phone=new Phone(); new Thread(()->{ try { phone.se

2021-05-16 15:22:35 135

原创 生产者消费者问题的两种解决方法

在高并发的环境下,出现了一个生产者消费者问题,如何保证生产者和消费者能够保持顺序执行,不会出现资源争抢问题?有两种解决方案:我们先假设有如下场景:有一个数字0,有两个方法,第一个方法是检测数字是否为0,如果为0则启动等待线程,并为数字加一,然后通知所有其他线程。第二个方法则是当数字不为0时,执行数字减一操作。第一种:利用 传统方法先给业务代码的方法加一个同步锁,然后有序的等待和通知,即加一个wait和notifyAll方法。代码如下:public class Day2 { public

2021-05-15 20:03:27 555

原创 &和&&的区别

&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。同等为短路运算的短路或||,只要碰到true则结束运算,例如第一个值为true,则输出第一个值,不计算第二个。...

2021-03-16 10:11:07 498

原创 short s1 = 1; s1 = s1 + 1和short s1 = 1; s1 += 1有啥区别?

short s1 = 1; s1 = s1 + 1,这种情况因为1默认为int形所以s1+1的结果也为int形,而s1为short形需要强制转换才能把int形转换成short。而short s1 = 1; s1 += 1,这个s1+=1相当于s1=short(s1+1)已经进行了隐式转换。

2021-03-16 09:59:00 89

原创 如何计算3*8效率最高

用移位运算计算的效率最高。因为位运算是直接在CPU运算,所以效率相比正常乘法运算还要快。例如232=2<<5=22^538=3<<3=32^3

2021-03-13 16:55:34 130

原创 switch可作用的数据类型

switch可作用于char、byte、short、int及它们的包装类switch不可作用于boolen、float、double、long及它们的包装类jdk1.5之后可作用于枚举类型jdk1.7之后可作用于String类型

2021-03-13 16:14:37 1075

原创 JAVA有哪些数据类型?

主要分成两大类:基本的数据类型和引用类型。基本的数据类型:1.整形:byte1、int4(默认)、short2、long82.浮点型:单精度float4、双精度double8(默认)3.布尔型:boolen1(true and false)4.字符型:char2引用数据类型:字符串、数组、类、接口、Lambda...

2021-03-13 15:27:34 50

空空如也

空空如也

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

TA关注的人

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