- 博客(85)
- 资源 (54)
- 问答 (1)
- 收藏
- 关注

原创 Android高级UI详解汇总
Android高级UI开发(一)RecyclerView控件的基本使用Android高级UI开发(二)RecyclerView控件使用----列表项的单击事件、添加(删除)列表项Android高级UI开发 ( 三 )RecyclerView控件---高级进阶之自己绘制列表分隔线...
2020-09-05 08:01:44
4266
原创 40岁大龄程序员变形记
当这个餐厅拉了新的宽带后,将要重新调试一遍。但是,当下完单后,“下单”按钮仍然是醒目的橙黄色,按理来说应该让“结账”按钮变成醒目的橙黄色,“下单”按钮置为灰色,因为下一个步骤,一般用户想要操作的是“结账”。制作这些文档与视频一方面是为客户服务的,同时也是为我自己服务的,留给我以后参考用的,更重要的是快速应对,引导客户自学,减轻自己工作量的一个重要手段。在对客户提供技术支持的过程中,更是收集了用户提出的问题,了解了用户常用的功能是什么,餐饮行业用的最多的就是会员,外卖功能,零售行业用的最多的就是进销存功能。
2025-01-18 19:05:46
435
1
原创 线程并发相关的原子操作类
#线程并发原子操作类何为原子性,就是一次性操作完成,在操作变量的时候,其它线程不能操作变量,也就是我们之前说的synchronized同步关键字的作用。这节我们不用synchronized,而是用系统API中的原子类,今天我们以其中一个AtomicInteger类为例来讲解。比如我们有20个人同时卖票,每人卖1000张,问最后总共卖了多少张?这里先给出答案:20000张。我们来看下代码如何编写,20个人相当于20个线程,然后每个线程内for循环1000次,每次给票数加1,那么java代码就是:模拟2
2022-01-31 00:00:00
1335
原创 线程范围内共享变量,使用ThreadLocal API来实现
1.回顾上节我们讲了线程共享范围内的共享变量,我们使用了一个Map(K,V),其中Key为正在执行的线程对象,value存储的是线程操作的变量,如一个int型的data,我们以key来区分是哪一个对象所操作的变量。这一节我们将使用ThreadLocal 这个线程范围内共享变量的专用API来实现。2.使用ThreadLocal实现2.1 使用ThreadLocal实现基本数据类型在线程范围内共享使用ThreadLocal实现线程范围内的共享变量。代码如下:public class ThreadSha
2022-01-24 14:12:41
1302
原创 线程范围内的共享变量
1. 线程范围内的共享变量的概念 假设有2个线程,一个全局变量 int data。2个线程内的代码共用这一个变量的声明(data),但它们操作data时,data的值在这2个线程里是独立的,互不影响的。我们这里所说的互不影响,不是我们之前说的syncronized,(线程1先修改data值,读取data值,释放锁后,线程2才可修改data和读取data,这样的话data最终的值还会变为线程2最后修改的值)。我们现在要实现的是,线程1修改了data=1, 线程2也修改了同一个data变量...
2022-01-22 14:04:04
3912
1
原创 线程间的通信notify与wait
今天我们来聊一下线程间的通信。这里的通信指的是通俗意义上的“通个信儿”或者“通个气儿”,不是说要传递什么数据,更多的含义是“通知对方”。我们现在来做一个2个动物参与的小游戏,在这里两个动物分别是猫和狗。先让猫跑10步,然后狗才能跑步,也是跑10步。要注意的是: 当猫10步还未跑完的期间,狗决不能跑动,只有当第1个猫把10步跑完后,狗才能开始跑,也是跑10步。我们用代码如何来模拟这个过程呢?我们简单的执行2个for循环便是:package testFuture;public class Th
2022-01-07 23:26:53
1360
原创 搭载rtmp直播服务器
这次我们搭建一个rtmp直播服务器,用于电脑或手机直播推流到服务器,然后其他终端如电脑或手机可以观看直播的视频画面。 我们这里用电脑录屏软件将实时录制的电脑屏幕画面直播给其它人看。总共需要3部分,第一,录屏软件录制电脑屏幕,并传递画面流到服务器; 第二,服务器rtmp搭建,应能接收来自录屏软件上传的画面;第三,视频播放器客户端能连接到rtmp服务器,接收rtmp服务器推送的视频流,从而可实时观看第一部分录屏软件的实时画面。这里最核心的就是第二部分,搭建rtmp服务器。1.下载ngin...
2021-10-11 21:33:54
2085
1
原创 cmake编译NDK初体验
本文用一个demo验证AndroidStudio如何编译生成一个C++动态库文件(so文件)给Java应用层使用。然后这个so库内部又如何调用一个预有so库中的C语言函数。1. 新建一个NDK工程1.1 新建一个android studio Native C++工程在main/cpp目录下默认有一个native-lib.cpp,还有一个CMakeList.txt文件(编译脚本),目录下默认有一个native-lib#include <jni.h>#...
2021-09-02 22:12:39
2343
1
原创 线程同步工具Exchanger
package cn.itcast.heima2;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ExchangerTest { public static void main(String[] args) { ExecutorService service...
2021-08-02 09:50:30
1100
原创 Android事件分发
梳理androidUI事件分发流程,解决appUI事件冲突问题:当一个大按钮作为背景,上面放一个小按钮,这时点击小按钮,小按钮是否会响应单击事件?答案:有可能背景响应了 单击事件,而让你的预期大跌眼镜。这里简单做以下笔记:假设背景容器布局是RelativeLayout,上面有一个Button。OnInterceptTouchEvent : RelativeLayout容器布局特有的事件分发函数onTouchListener 接口的onTouch函数onTouchEventonDi..
2021-08-02 09:49:36
1127
原创 用BlockQueue实现线程间的通信,子线程执行完了主线程执行,主线程执行完了子线程执行
package cn.itcast.heima2;import java.util.Collections;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.atomic.AtomicInteger;public class BlockingQueueCommunication { /** *...
2021-08-02 09:48:13
1151
原创 Hashmap与HashSet的关系
Hashset内部是 由Hashmap构造的,只用到了Hashmap的key。见Hashset的源码:public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long serialVersionUID = -5024744406713321676L; priva
2021-06-19 19:49:29
1477
原创 BlockQueue阻塞队列实现之前的消费者生产者模式condition
package testFuture;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;public class BlockingQueueTest { public static void main(String[] args) { final BlockingQueue queue = new ArrayBlockingQueue(3); ...
2021-06-19 19:21:44
1183
原创 线程工具Semaphore
Semaphore信号灯,也是实现多线程间互斥的。多个线程只有拿到了这盏灯,才能执行下面的代码,相当于lock、sychronized; 当一个线程拿到了这盏灯后,其它线程将暂停等待,直到这个线程执行完毕释放灯。当然信号灯可以有多盏灯,如有3盏灯,然后10个线程去执行代码,这期间只能有3个线程拿到灯,可以执行。当有线程释放了1个灯后,其它7个线程当中才能有一个线程冲过去抢到灯。示例代码如下:package cn.itcast.heima2;import java.util.concurrent.
2021-05-15 17:34:58
1246
原创 线程工具CyclicBarrier
package testFuture;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CyclicBarrierTest { public static void main(String[] args) { ExecutorService servi...
2021-05-15 17:12:11
1208
原创 一个经典的多线程condition使用实例代码,请评论
class BoundedBuffer {final Lock lock = new ReentrantLock();final Condition notFull = lock.newCondition();final Condition notEmpty = lock.newCondition();final Object[] items = new Object[100];int putptr, takeptr, count;public void put(Object x) throw
2021-05-02 17:20:50
1309
原创 线程-读写锁。
读写锁。我们上次温习了synchronized与Lock.我们遗留了一个问题,就是想让读读不互斥,因为多线程同时读取数据并不会破坏数据。如果能实现读读不用互斥,那将大大提升了多线程读性能。于是我们引入了读写锁ReentrantReadWriteLock。ReentrantReadWriteLock可以专门创建一个读锁和写锁。读锁:读读不互斥,但是读写互斥。 写锁:不但读写互斥,而且写写也互斥。创建一个读写锁 ReadWriteLock rwl = new ReentrantReadWriteLoc.
2021-05-02 15:55:16
1285
原创 线程Lock
我们之前学习了synchronized,今天来介绍一下lock。lock与synchronized一样都是为了多线程在竞争公共资源时,能不发生冲突,就是一个线程获取了锁,就去执行代码块,其它线程只能等待第一个线程执行完同步代码块,才能有机会获取到synchronized锁对象。 lock与synchronized最大的区别是,lock锁的释放需要程序员手动调用unlock,一般放在要同步的代码的最后调用unlock,或者try..catch..finally中的finally里调用unlock。当然,.
2021-04-24 17:30:19
1393
原创 Callable与Futrue.get()等待线程执行完毕
1. 等待一个子线程执行完毕public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor(); Future<String> future = threadPool.submit( new Callable<String>() { public String call() throws Excepti
2021-04-17 19:35:07
2899
原创 线程池回顾
线程池:一个池子里创建1个或多个线程,通常往这个池子里扔进去多个任务,然后多个线程会抢着执行这些任务,如果一群狼共同吃掉这些羊群(多个任务)。1. 创建线程池目前我了解的创建线程池有4种方式: (1)线程池里的线程数是固定不变的;(2)线程池里只有1个线程池;(3)线程池里的线程数是动态变化的;(4)定时执行任务的线程池。接下来我们就依次介绍一下上述4种创建线程池的方式。1.1 线程池里的线程数是固定不变的。 创建方式:ExecutorService threadPoolFixed...
2021-04-11 22:20:50
1330
原创 android项目常见疑问
android笔记:ServiceLifecycleDispatcher: onServicePreSuperOnDestroy中分发了 ON_STOP与ON_DESTROY两个事件,因此自定义类可以感知Service的ON_STOP和ON_DESTROY两个事件,当Serivce执行到生命周期的onDestroy时。...
2021-03-27 16:36:30
1834
原创 java thread study
0. 用runnable创建线程具有面向对象的思想。1. quartz 定时器开源库。3. 多线程间的互斥:(1)多线程间的互斥,用synchronized关键字,两个线程用互斥锁必须用同一个对象才能实现互斥。(2) 两个非静态函数前加synchronized关键字,它们的公用锁是this,就是当前对象实例。(3)静态函数前加synchronized关键字,它用的锁对象是...
2021-03-27 12:00:32
1270
原创 Android性能优化笔记(三)
1. 引用分类(1)强引用: Object o = new Object ,平时用的最多的。(2)软应用: 内存不足时回收,常用于缓存图片(3)弱引用:不管内存是否足,都回收。GC扫描2次就回收,常用于引用activity的context。(4)虚引用:用于跟踪GC回收的通知。 软弱引用与引用队列结合的使用场景: 软引用和弱引用如果与一个引用队列关联起来的话,那么它们所指向的对象被回收后,引用会被保存在引用队列里。 往往通过查询引用队列中是否有值(元素为引用变...
2020-09-02 12:01:08
1709
原创 Android性能优化笔记(并非详细教程) (二) UI绘制优化
1. 减少没有必要的背景。 android:background="@color/white"2. 减少布局层级 2.1 分析层级的工具layout Inspector运行起来一个APP后,然后在android studio工具栏上点击Tool --》layout inspector 就可以显示当前页面的布局层级,用于观察没有必要的嵌套,去优化它们。 2.2 优化方法优化技巧:尽可能用1个容器,若父布局只有1个孩子布局,即该子布局没有兄弟,则可以把当前子布局与父...
2020-07-20 08:51:14
1827
原创 一位35岁老实程序员心魔因委屈而孕育,因失望而长大
在我现在的公司做软件开发真心很累。我来了之后APP从无到有,从分析需求到原型设计,再到接口文档,这些其它岗位的活儿分配给我,我愿意承担,我喜欢,但是唯有一点我不认同,就是把他人的多数问题总是推托给我,而我却孤立无援。 我如果不澄清自己的清白的话那些问题永远是我的,因为没有人愿意去从自身找问题。 引起这些问题的根本原因是什么?怎么会用孤立无援来形容是不是有点夸张...
2020-07-10 23:21:37
1220
11
原创 android性能优化笔记(一)Android启动页优化
主要优化Application onCreate函数里的执行时间,和SplashActivity的启动。1. Application优化经验:(1)Application的oncreate函数里的耗时操作放在线程里去。(2)用到的时候再初始化某些第三方SDK,总之最好不要提前调用某些函数,用到的时候再调用。2. SplashActivity启动页,即第一个页面容易出现绘制前的黑屏或白屏,也就是说先闪一下黑(白)屏才能绘制出SplashActivity的布局界面,解决方法:方法1.
2020-07-07 22:28:12
2044
转载 android 使用AIDL语言实现进程间通信
https://user.qzone.qq.com/254904252/infocenter
2020-06-16 22:03:04
1776
原创 Android高级UI开发(四十五)Canvas Path
1. Path概念用Path定义一个图形,然后用canvas.drawPath(...)函数来绘制这个图形。例如绘制一个圆。Path可以绘制各种图形,如二次,三次贝塞尔曲线,圆形、多边形,三角形,五角星等几何形状。public class PathOpView extends View { private Paint mPaint; public PathOpView(Context context) { super(context); mPai
2020-05-18 17:28:11
1971
原创 多线程温习2. 多线程之间的同步
现在我们要启动2个线程,第一个线程打印“gaoxiaowei”中的每一个字符,然后换行; 第二个线程打印“zhangwenbin”的每一个字符然后换行,代码如下:public class TraditionalThreadSynchronized { /** * @param args */ public static void main(String[] args) { new TraditionalThreadSynchronized().init(); } privat
2020-05-14 17:13:59
1816
原创 多线程温习1--创建java线程的两个方法
如何开启一个线程?方法1: Thread thread = new Thread(){ @Override public void run() { while(true){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1:" + Thread.curre
2020-05-14 16:15:42
1728
原创 Android高级UI开发(四十四)canvas基本知识(2) 裁剪与区域
裁剪:裁剪后,canvas只能在裁剪出的这块rectF矩形上进行绘制。区域:canvas图层上的一块封闭区域,如下rect2这个矩形区域,drawRegion绘制出这个区域。package com.xiaowei.lsn7_canvas;import android.content.Context;import android.graphics.Bitmap;...
2020-04-29 15:18:29
2298
1
原创 Android高级UI开发(四十三)Canvas基本知识(1)
直接贴代码,注释很详细。源码下载:package com.xiaowei.lsn7_canvas;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.gra...
2020-04-29 10:01:58
1810
原创 Android高级UI开发(四十二)canva滤镜
矩阵简述1、定义M*n矩阵。2、矩阵乘法它的意思就是将第一个矩阵A的第一行,与第二个矩阵B的第一列的数字分别相乘,得到的结果相加,最终的值做为结果矩阵的第(1,1)位置的值(即第一行,第一列)。同样,A矩阵的第一行与B矩阵的第二列的数字分别相乘然后相加,结果做为结果矩阵第(1,2)位置的值(即第一行第二列)。矩阵A乘以矩阵B和矩阵B乘以矩阵A的结果是不一...
2020-04-07 23:04:41
2029
原创 android使用代码动态做表格
package com.anyikang.emergency120.aek.activity;import android.annotation.SuppressLint;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.support.v7.app.AppCompatAc...
2020-03-25 19:42:36
2223
原创 Android高级UI开发(四十一)xefmode
public enum Mode { // these value must match their native equivalents. See SkXfermode.h /** * <p> * <img src="{@docRoot}reference/android/images/graphi...
2020-03-17 15:51:43
2074
原创 python安装相关库失败的解决方法及初学常见问题
1. 安装图表库matplotlib失败的解决方法pip install -ihttps://pypi.tuna.tsinghua.edu.cn/simplematplotlib2. 安装 pygalpython -m pip install pygal==1.7
2020-02-06 10:46:30
2072
2
原创 Android高级UI开发(四十)shader渲染器介绍
Shader是什么,Canvas可以绘制图形(圆形、弧形、矩形等),Shader是为这些图形着色的,改变这些图形外观的,例如在一个圆形上将图片贴在圆形上,就可以实现圆形头像控件,在这里BitmapShader改变了圆形这个图形的外观,将图片内容附着到了图形上面。Shader不只有BitmapShader,它总共包括如下Shader:BitmapShader、LinearGradient、Sweep...
2020-02-02 20:08:49
2230
_Path_Basic.rar
2020-05-18
Canvas基本知识1.rar
2020-04-29
Lsn5_Paint_Xfermode_DST.rar
2020-03-19
Lsn5_Paint_Xfermode_SRC.rar
2020-03-19
Lsn5_Paint_Xfermode.rar
2020-03-19
Paint_RadialGradient.rar
2020-03-01
Paint_RadarView.rar
2020-02-19
Shader.rar
2020-02-02
CircleProgressBar.rar
2020-01-08
ViewGroup事件分发Demo实验代码
2019-05-07
android View事件分发机制实验代码
2019-05-06
动画框架Android滚动让系统控件也可以识别自定义属性
2019-04-22
转场动画之多组动画同时执行
2019-04-09
android转场动画示例
2019-04-08
android Material揭露动画
2019-04-04
属性动画实例
2019-04-03
属性动画(objectAnimator,valueAnimator,平移、缩放、旋转、透明度)
2019-03-18
自定义behavior监听控件的滑动事件
2019-03-10
自定义behavior
2019-03-03
appbar滑动视差效果
2019-02-24
滑动列表显示或隐藏Toolabr
2019-01-31
NestedScrollView滑动显示或隐藏Toolbar
2019-01-31
3种垂直滑动页面让Toobar隐藏或显示动画
2019-01-30
cardview+浮动按钮+水波纹
2018-12-03
tablayout标签+viewpager滑动关联
2018-12-01
Toolbar随滚动透明效果
2018-11-23
SearchView+Toolbar使用
2018-11-16
Toolbar基本用法
2018-11-07
Android TextInputLayout用法
2018-10-07
android snackbar用法
2018-09-18
android studio Multidex多分包问题
2016-10-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人