学习日志
文章平均质量分 60
九州大地
这个作者很懒,什么都没留下…
展开
-
Camera2使用
package jwipc.com.monitoringpad.util;import android.Manifest;import android.annotation.TargetApi;import android.app.Activity;import android.content.Context;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.grap.原创 2021-08-24 10:21:19 · 437 阅读 · 0 评论 -
android 加载长图
长图加载的自定义view。总结:1.利用Options先得到图片的宽高。2.通过计算view的宽高得到缩放因子。3.利用缩放因子,计算要加载的图片Rect。4.利用 BitmapRegionDecoder结合Rect进行制定区域解码图片。5.通过Options.outConfig = Bitmap.Config.RGB_565降低采样率达到减小内存开销6.通过 Options.inMutable = true和Options.inBitmap = bitmap重复利用...原创 2021-08-04 12:04:29 · 667 阅读 · 0 评论 -
WindowManager addView removeView抛异常 has already been added to the window manager
WindowManagerGlobalWindowManager服务其实是WindowManagerImpl的对象private final ArraySet<View> mDyingViews = new ArraySet<View>();这个变量用于存储windowManager.addView(view) 里面的view。如果mDyingViews.add重复add进去的话就会抛异常,异常信息:view 已经存在了。Global 全局的 ...原创 2021-04-15 18:18:18 · 4169 阅读 · 0 评论 -
Android 动态换肤 支持5.0-9.0系统,支持自定义view
动态换肤,插件化换肤的好处:不会增加apk包体积。无缝换肤。不用退出应用。不会闪屏。思路:1.如果要更换view的背景颜色,字体颜色,图片等,就必须先知道view的加载流程。2.知道view的加载之后,就可以setTextColor,或者setBackroudColor了。3.主要是setTextColor或者setBackroudColor的资源加载哪个地方的。默认是加载内置app的。我们要做的事情就是换肤之后加载我们特定的换肤资源。解决问题1:activity里面vie.原创 2021-04-13 18:08:08 · 326 阅读 · 0 评论 -
绘制文本的测量
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);Paint.FontMetrics fontMetrics = paint.getFontMetrics();//获取字体度量对象fontMetrics的介绍:测量文本的宽高:Rect rect = new Rect();paint.getTextBounds("文本", 0, "文本".length(), rect);//把文本的宽高读到一个矩形里面。float wid...原创 2021-01-21 15:16:37 · 126 阅读 · 0 评论 -
android studio 开发java
第一步:File---New---New Module---Java Library第二步:填好Libraryname和Java class name然后点击完成第三步:创建main方法第四步:点击锤子旁边那个按钮。然后点击Edit Configurations...第五步:点击+号,选择Application第六步:Name可以自己定,Main class就是那个module下的那个创建了main方法的类。Use class...原创 2021-01-21 10:14:23 · 666 阅读 · 0 评论 -
浏览器发起一次http请求都经历了什么?
首先是拼接http请求报文(内容:请求行,请求头,请求体,空行)请求行的内容:1.使用什么方法进行请求(get,post,put,delete,head(head和get几乎一样,主要区别head请求服务器是不返回body的,应用场景,你想知道你要下载的文件是多大时,是否支持断点下载。得到这些数据之后再做具体的请求。head是比get速度 快的。)等等) 2.URL字段。/u...原创 2021-01-19 18:58:14 · 538 阅读 · 0 评论 -
Cookie TCP/IP Https
Cooike http的头字段Cooike的起源:购物车Cooike的工作机制Cooike的作用:1.会话管理:登录状态、购物车 2.个性化:用户偏好、主题 3.Tracking(追踪):分析用户行为XSS(Cross-site scripting跨站脚本攻击):HttpOnly加上HttpOnly本地脚本看不到Cooike这些信息XSRF(Cross-site request forgery跨站请求伪造):Referrer是从哪个网站跳转过来的。...原创 2021-01-19 15:20:26 · 166 阅读 · 1 评论 -
编码,加密,hash
编码解码:Encoding&Decoding加密解密:Encryption&Decryption数字签名:Digital Signature压缩与解压缩:Compression&Decompression序列化:Serialization哈希:hash字符集:Charset相关词:MD5 、SHA1、RSA、DSA、AES、BASE64、encoded、URL、Unicode、UTF-8、GBK、ISO-8859-1密码棒起源:古代战争--古典密.原创 2021-01-15 18:08:38 · 292 阅读 · 1 评论 -
android 自定义饼图并绘制百分比数值
public class PieChartView extends View { private float mRadius = Utils.dpToPx(150); private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); RectF bounds = new RectF(); int[] angle = {60, 100, 120, 80}; int[] color = {Color.parseColor(.原创 2020-11-20 20:36:14 · 318 阅读 · 0 评论 -
android 自定义view仪表盘
package mda.jwipc.android.myas23;import android.content.Context;import android.graphics.*;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;/** * Created by 10090 on 2020/11/20. */public class .原创 2020-11-20 19:49:51 · 207 阅读 · 0 评论 -
join yield
join指的是当前停止当前线程,给调用join方法的线程执行权,并且等待调用join方法的线程执行完毕之后当前线程才继续执行。相当当前线程调用了wait方法,然后等待另外一个线程调用notify方法唤醒。public class WaitDemo { Thread thread1; Thread thread2; private void printName() { try { Thread.sleep(1000); ...原创 2020-11-18 17:18:51 · 206 阅读 · 1 评论 -
volatile 和 synchronized区别
原子性解析:就是一个事务从开始到结束都没有被分开执行。线程安全解析:要做到线程安全,就要保证数据的同步性和程序的原子性。乱序执行:指没有依赖关系的指令被cpu打乱执行。意图是提高cpu的性能。使cpu在cpu时钟周期内能执行更多的指令,增加cpu的吞吐率达到提高cpu性能的技术。指令重排:按顺序执行的指令被重新打乱执行。synchronized:不仅保证了数据的同步性,而且还保证程序的原子性。volatile:只保证数据的同步性,不能保证程序的原子性。synchronized:可以保原创 2020-11-18 12:21:01 · 206 阅读 · 0 评论 -
端口号取值范围
一般用到的是1到65535,其中0不使用一般的应用程序使用1024到4999用来通讯5000以后的用来用户自定义端口原创 2020-11-06 10:53:56 · 1050 阅读 · 0 评论 -
Error:(42, 0) Gradle DSL method not found: ‘implementation()‘
Error:(42, 0) Gradle DSL method not found: 'implementation()'Possible causes:<ul><li>The project 'JwipcMdaServer' may be using a version of the Android Gradle plug-in that does not contain the method (e.g. 'testCompile' was added in 1.1.0).&l原创 2020-11-05 16:07:58 · 547 阅读 · 1 评论 -
Window层级
应用 Window 层级范围是 1~99,子 Window 层级范围是 1000~1999,系统 Window 层级范围是 2000~2999,这些层级范围对应着 WindowManager.LayoutParams 的 type 参数,如果想要 Window 位于所有 Window 的最顶层,那么采用较大的层级即可,很显然系统 Window 的层级是最大的,当我们采用系统层级时,需要声明权限。WindowManager是整个窗口管理机制里面的枢纽,也是这边重点要讲的。WindowManager实现了原创 2020-08-13 17:39:34 · 671 阅读 · 0 评论 -
Activity Dialog Toast 状态栏 导航栏是怎么添加view的
Dialog添加view的方法:public void setContentView(@LayoutRes int layoutResID) { mWindow.setContentView(layoutResID);}Activity添加view的方法:public void setContentView(View view) { getWindow().setContentView(view); initWindowDecorActionBar();}A.原创 2020-08-13 17:25:35 · 133 阅读 · 0 评论 -
适配器模式,门面模式,代理模式,装饰器模式,桥接模式,策略者模式的作用总结。
适配器模式,主要解决的是接口的兼容性,为复用原有接口做一些适配。门面模式,主要解决一组接口的易用性问题。如果接口过多的话可以打包成一个接口,用户只需要使用一个接口就可以操作多个接口。代理模式,主要是对已有接口功能性的增加,增加的功能与原来的功能没有直接性的关系。装饰器模式,也是对已有功能的增强。是对已有接口功能的增强,比如读写字节,使用装饰器之后可以做成带缓冲的读写字节。桥接模式,主要是为了提高同一种类的类的复用性,减少同一类型的类成倍增加的问题。主要是抽象和实现相分离。本质是利用java的原创 2020-08-13 12:05:26 · 262 阅读 · 0 评论 -
Builder建造者模式的使用条件
为什么要使用建造者模式创建对象。1.创建对象需要的属性过多比如十个八个或者二十个等,不宜使用构造函数传递参数。构造函数传递过多的参数可读性不好。同时,又不能暴露set方法去设置属性的值,创建好对象之后就不做修改了。这样就需要用到建造者模式,增加代码的可读性。2.创建对象的时候,需要满足某些属性的值才可以创建成功。属性参数有依赖关系,比如需要判断某个值大于或者小于某个值的时候。或者某些值不能同时为空的时候等等。或者需要满足某些条件才可以。这样的就可以使用建造者模式去创建对象。...原创 2020-08-11 11:43:06 · 321 阅读 · 0 评论 -
serializable和parcelable的区别
parcelable程序员自己手动实现的序列化的方式。速度快效率高。serializable使用了反射,效率相对低一点。parcelable不支持对象数据持久化。不支持把对象保存到磁盘。serializable支持数据持久化,支持把对象序列化保存到磁盘上。数据需要持久化的要实现serializable,不需要持久化的使用parcelable它效率高速度快。...原创 2020-08-11 10:59:34 · 210 阅读 · 1 评论 -
设计模式基本原则S O L I D
S:Single单一职责原则单一职责原则指的是,一个模块或者一个类的职责要单一。比如一个水果店,那它的单一职责就是卖水果。而不应该同时存在卖菜卖水果卖电脑的行为,水果店那你就单单只经营水果生意就好了。只要是水果你都可以卖,但是不要卖其他杂七杂八的。主要目的是降低耦合性,提高内聚性,同时降低了复杂程度。O: Open开闭原则,对拓展开放,对修改关闭。比如常用的装饰器模式,装饰类拓展功能的那部分就遵循了对拓展开放的原则。装饰类不能对被装饰类进行修改,就遵循了对修改关闭的原则。代理模式也是一...原创 2020-08-07 11:41:11 · 238 阅读 · 0 评论 -
是否需要为每个类定义接口?
在开发的时候,是不是任何代码都要只依赖接口,完全不依赖实现编程呢?做任何事情都要讲求一个“度”,过度使用这条原则,非得给每个类都定义接口,接口满天飞,也会导致不必要的开发负担。至于什么时候,该为某个类定义接口,实现基于接口的编程,什么时候不需要定义接口,直接使用实现类编程,我们做权衡的根本依据,还是要回归到设计原则诞生的初衷上来。只要搞清楚了这条原则是为了解决什么样的问题而产生的,你就会发现,很多之前模棱两可的问题,都会变得豁然开朗。这条原则的设计初衷是,将接口和实现相分离,封装不稳定的..原创 2020-08-06 17:24:22 · 265 阅读 · 0 评论 -
java为什么不支持多继承。
public class TestExtends extends A,B{ public void print(){ eat(); System.out.println(a); }}class A{ int a=1; public void eat(){ System.out.println("吃A"); }}class B{ int a=2; public void eat()...原创 2020-08-06 15:54:48 · 220 阅读 · 0 评论 -
java 类加载过程
1.加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。类的加载由类加载器完成,类加载器通常由JVM提供,这些类加载器也是前面所有程序运行的基础,JVM提供的这些类加载器通常被称为系统类加载器。除此之外,开发者可以通过继承ClassLoader基类来创建自己的类加载器。通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来...原创 2020-08-05 14:53:35 · 95 阅读 · 0 评论 -
接口和抽象类的区别,面向对象设计原则
典型回答接口和抽象类是 Java 面向对象设计的两个基础机制。接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到 API 定义和实现分离的目的。接口,不能实例化;不能包含任何非常量成员,任何 field 都是隐含着 public static final 的意义;同时,没有非静态方法实现,也就是说要么是抽象方法,要么是静态方法。Java 标准类库中,定义了非常多的接口,比如 java.util.List。抽象类是不能实例化的类,用 abstract 关键字修饰 class,其目..原创 2020-08-05 14:34:25 · 204 阅读 · 0 评论 -
Android OpenCv实现人脸检测
功能解释:1.人脸检测:摄像头下有人检测出来即可。功能解释:2.人脸识别:得识别出当前的人是否和人脸库里面的人一致。我这里实现的是第一个功能。默认你的工程已接入了OpenCv所需要的相关库,如果没接入的话可以看我写的一篇:Android OpenCv导入工程第一步:添加相机权限: 如果手机是6.0以上的要动态申请权限,否则不能正常使用相机功能。6.0以上动态权限申请第二步:创建布局文件,使用opencv提供的 JavaCameraView<?xml version="1.0" e原创 2020-06-05 16:53:17 · 714 阅读 · 0 评论 -
android 滚轮控件
总共分为六步:第一步 : 定义一个WheelPicker 类把下面代码拷贝进去import android.content.Context;import android.content.res.TypedArray;import android.graphics.Camera;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.Paint;import andro.原创 2020-05-15 15:57:45 · 914 阅读 · 0 评论 -
cpu优化,内存的优化,卡顿优化,启动优化的方式,其他的一些优化
cpu优化1.主线程更新ui的时候,子线程不要抢夺cpu的占有权。比如子线程里面读写大文件,或者操作数据库的时候操作大的对象。2.设置布局的时候尽量减少层级的嵌套。尽量使用LineaLayout作为父布局容器,还可以使用meger标签来设置布局但是前提是要知道外层使用布局的类型,还可以使用viewstub设置布局,viewstub在布局没有内容显示的情况下是不会加载到父布局容器中的。设置Ac...原创 2020-04-28 01:24:45 · 733 阅读 · 0 评论 -
AsyncTask分析笔记
AsyncTask. execute(Params… params)params这个参数就是入参。异步执行任务的时候需要用到的参数可以用这个params传入。在这个方法可以接受到传入的参数。protected String doInBackground(Params… params)这个execute(Params… params)方法的源码:里面去调用一个executeOnExecutor(...原创 2020-04-27 01:31:45 · 120 阅读 · 0 评论 -
ThreadLocalMap和HashMap的对比。
ThreadLocalMap是ThreadLocal的静态内部类。使用方式上:1.两者都是Key和Value的形式,但是ThreadLocalMap的Key是指定的(ThreadLocal),HashMap的是任意值。2.都是使用了数组去存储数据。3.set或者put的值的时候,使用的哈希算法不一样。4.解决哈希冲突的算法不一样。HashMap使用的是链地址法。ThreadLocalMap...原创 2020-04-25 00:18:36 · 3416 阅读 · 0 评论 -
handler发送消息之后做了什么事情。
首先来看handler发消息的几个方式:Handler提供了好几个发送消息的方式。post系列和sendMessage系列都是差不多的最终都会调用sendMessageAtTime()函数:这里用post系列举例handler.post(Runnable r) 入参是一个Runnable。看看里面做了什么。public final boolean post(Runnable r){r...原创 2020-04-24 20:52:07 · 125 阅读 · 0 评论 -
解答为什么谷歌大哥设计Looper一个线程中只能有一个
其实很简单:我们来看Looper.loop()方法里面的代码:public static void loop() {final Looper me = myLooper();if (me == null) {throw new RuntimeException(“No Looper; Looper.prepare() wasn’t called on this thread.”);}...原创 2020-04-24 09:21:16 · 930 阅读 · 0 评论 -
线程间通信使用handler,为什么创建handler前要调用Looper.prepare()方法。
问题:创建handler前如果不调用Looper.prepare()会异常闪退。来看Handler的默认构造方法:public Handler() { this(null, false);//这个就是下面的这个方法 一个callback参数 一个boolean参数}public Handler(@Nullable Callback callback, boolean asyn...原创 2020-04-23 22:10:37 · 634 阅读 · 0 评论 -
记bitmap内存优化
减小bitmap占内存大小的方案有两种:1,options.inSampleSize 设置采样率的值,原理是等比缩放宽高。缩放多少倍bitmap的内存大小占用久缩放多少倍。 2.options.inPreferredConfig = Bitmap.Config.RGB_565; 设置位深,也可以说是设置RGB格式,一般有三种RGB_8888,RGB_565,RGB_4444(现在用这种好像无效果...原创 2020-04-16 00:36:00 · 298 阅读 · 0 评论 -
获取手机app cup运行情况
python /Users/wenyidan/Library/Android/sdk/platform-tools/systrace/systrace.py -t 20 sched gfx view wm am app webview -a "com.example.myapplication" -o ~/Documents/111.html原创 2020-04-06 00:39:22 · 135 阅读 · 0 评论 -
一个Java例子,解释清楚注解的作用
https://baijiahao.baidu.com/s?id=1612408653409570352&wfr=spider&for=pc原创 2020-04-05 23:24:56 · 122 阅读 · 0 评论 -
Android Systrace 使用详解
https://www.jianshu.com/p/75aa88d1b575原创 2020-04-05 23:15:01 · 414 阅读 · 0 评论 -
适配器模式的理解
使用场景:1:替换依赖的外部系统当我们把项目中依赖的一个外部系统替换为另一个外部系统的时候,利用适配器模式,可以减少对代码的改动。具体的代码示例如下所示// 外部系统Apublic interface IA { //... void fa();}public class A implements IA { //... public void fa() { //......原创 2020-03-06 01:40:17 · 157 阅读 · 0 评论 -
activity全屏设置方法
方法一 <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowFullscreen">true</item> //隐藏状态栏,不显示状态栏文字也看不到 <item name="a...原创 2019-12-15 21:40:59 · 201 阅读 · 0 评论 -
错误 Manifest merger failed with multiple errors, see
解决办法,app 清单配置文件里看Log 点击清单文件,然后查看右边的Merged Manifest原创 2019-12-02 16:19:26 · 79 阅读 · 0 评论