个人笔记
文章平均质量分 68
豌豆琪琪
这个作者很懒,什么都没留下…
展开
-
Android studio 2021.1.1 patch2 aidl踩坑记录
使用注释踩坑无论使用的是 /******/ 还是 // 都会导致 通过 gradlew …:assembleRelease 编译失败,并且不会有任何的明确的错误提示1. 坑一比如使用了注释后出现看到编译器报错了,报了一个莫名其妙的错。2.坑2将注释加到最后一个函数上边报了一个更加奇葩的错误3.正常编译的版本第一次遇到这种奇葩的版本,这个是在我不断的试错排查各种原因的情况下一点一点试出来,供各位同学借鉴,目前没要找到解决版本,如果再aidl 接口中使用注释,我的办法是降低 s原创 2022-03-17 19:21:56 · 3494 阅读 · 0 评论 -
AIDL使用 进阶2
使用aidl 后如何彼此检测远程服务和客户端的生命周期。如果不能监控那将有一个很严重问题,程序可能会出现Crash ,报的基本是一个远程服务已经不存在。1.客户端如何检测服务端是否连接基本有三种方式:调用远程方法的时候捕获RemoteException(DeadObjectException); 调用IBinder的pingBinder()进行检测; 实现IBinder.DeathRecipient接口回调前两种是比较被动的,一般是你去使用的时候才去调用和验证。相比第三种比较靠谱些。原创 2021-11-04 20:53:52 · 483 阅读 · 0 评论 -
AIDL使用继承关系自定义类及调用数据异常问题记录
AIDL使用与注意事项基本使用1.aidl的定义,我这里定义了aidl 使用的三种场景2.service 的构建3.构建实体类实体类基类实体类父类继承关系引发的参数失效或为null 问题4.服务的绑定与数据通信5. 新建接口IDeviceListener.Stub 服务端收到为null 问题6.服务的注册基本使用1.aidl的定义,我这里定义了aidl 使用的三种场景package com.example.aidltestmoclinet;import com.example.aidltestm原创 2021-05-26 11:15:18 · 1276 阅读 · 2 评论 -
Android系统架构开篇
一、引言本文作为Android系统架构的开篇,起到提纲挈领的作用,从系统整体架构角度概要讲解Android系统的核心技术点,带领大家初探Android系统全貌以及内部运作机制。虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰。Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通转载 2021-03-09 19:51:40 · 436 阅读 · 0 评论 -
Https http原理及流程梳理
HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在传输过程中拦截到数据也无法破译,这就保证了网络通信的安全。密码学基础在正式讲解HTTPS协议之前,我们首先要知道一些密码学的知识。明文: 明文指的是未被加密过的原始数据。密文:明文被某种加密算法加密之后,会变成密文,从而确保原始数据原创 2021-03-02 16:10:53 · 234 阅读 · 0 评论 -
APP使用Usb被占用独占模式问题记录
问题描述: app中用到外接usb 设备,但是其他应用也是用到了usb,那么就存在一个问题,当别的应用先通过授权的方式获取到usb 权限,并且申请了独占模式,别的应用就无法再通过usb 传输数据,即使你已经通过了usb 获取到权限,并且可以正常的获取到UsbDevice 设备,并且通过openDevice获取到UsbDeviceConnection,也可以获取到设备id.但是就是无法读写数据.这是我的正常操作:UsbDevice device = (UsbDev...原创 2021-03-02 16:38:10 · 4604 阅读 · 0 评论 -
网络协议 TCP 如何保证数据的有序无误传输
如何保证数据的有序无误传输1.如何保证有序传输2.如何保证传输的无误性上一节讲了网络协议 TCP 数字编号和重传机制,其实已经变相的说明了这个问题。1.如何保证有序传输首先说,TCP 不同与UDP ,TCP 是有序的,那么是如何保证有序的,数据在发送后,可能经过不同路径,这样到达目的地时的顺序可能会与发送时不同,后发先到是一件很平常的事,网络层是不会保证数据的有序,TCP 是传输层协议,他实现了这样的一套逻辑,虽然网络层收到的消息顺序可能不一样,但是tcp 保证了提交到上层,应用层的消息,是有序的。原创 2021-01-24 15:14:28 · 4664 阅读 · 0 评论 -
网络协议 TCP 数字编号和重传机制
TCP 作为一种可靠的传输协议,在他的背后注定会有一套数据包的安全检查与重发确认,那么如何检查一包数据是否正确的被对方接收,这就需要为每个数据包,做标签,即数据编号,当发现数据包,丢失或者超时就会发起重传机制1. TCP 的数字编号作为一种确认机制的根本,编号起到了非常重要的作用。TCP 数据端以字节为单位对数据段中的“数据”部分进行一一编号,确保每个字节的数据都可以有序传送和接收。在前边我们介绍了tcp的数据包结构,并且介绍了序号和确认号,序号就是这里所说的数字编号,在数据包头中序号占32位,在t原创 2020-12-06 13:19:08 · 1955 阅读 · 0 评论 -
Android 如何使用亚马逊 S3实现文件的断点续传
1.集成android 开发环境implementation 'com.amazonaws:aws-android-sdk-s3:2.17.1'目前这个版本是最新的2.s3 服务端的相关数据,注册时都会给到.有两种方式private String accessKeyId;private String secretAccessKey;private String sessionToken;private String bucket;private String endpoin.原创 2020-10-27 22:10:50 · 3224 阅读 · 3 评论 -
Realm 你所不知知道的用法
Realm 是一种可以跨平台 的数据库,速度也很快,至于普通的增删改查今天我就不多讲了.讲点大家可能不知道的1.数据库变动监听 这是什么gui,通俗讲就是对这个数据库表进行监听,当数据发生变化时监听器就会触发,和rxjava 契合,事实上用到了rxjava 可以对增删改查的任意状态进行监听,这个在开发中很有用,数据驱动页面. 我们先来看一组查询时的监听 realm.where(PhonePhotoRealm.class) .sor...原创 2020-06-18 09:35:54 · 826 阅读 · 0 评论 -
android 不root 手机如何查看realm 数据库和SharedPreferences
1.通过adb shell 进入 设备2.如果进不去,查看是否连接设备 adb devices3.输入 run-as 包名 这是会进入到 /data/data/ 包名下/4.输入 ls 查看 这是我的文件 数据库放在 files 下 SharedPreferences 放在shared_prefs 下5. 进入shared_prefs 先可以看到 项目所有的xml 文件 输入 cat xxx.xml 查看你的xml信息6....原创 2020-06-17 18:19:48 · 619 阅读 · 0 评论 -
Retrofit post 同步请求
现在网络请求基本都是Retrofit + rxjava + okHttp 这样一套组合。但是有时会有其他一些需求,比我同步post请求.定义接口异步基本都这样 @FormUrlEncoded @POST(Constants.ADD_LIBRARY_PHOTO) Observable<BaseResultBean<EmptyEntity>> addLibraryPhoto(@FieldMap Map<String, String> s.原创 2020-06-07 16:53:29 · 1582 阅读 · 0 评论 -
Collections.sort 实现对集合的排序
随便定义一个集合String[] str = new String[]{ "1", "9", "5", "6", "1", "4", "4","1", "9", "5", "6", "1", "4", "4",};然后使用: Collections.sort (list, new Comparator<String> () { @Override public int compare(String o...原创 2020-06-03 11:47:55 · 813 阅读 · 0 评论 -
android ios使用ffmpeg 你还在自己编译么
最近因为业务需要,要对上传的图片 和 视屏做压缩处理,我们都知道,凡事涉及到图形图像方面的,ffmpeg肯定是首选的,但是对于移动端ios ,android 都需要自己去编译,并且包的大小不是和好的控制,因为大多人如果不是做和ffmpeg 相关的的工作,连他如何顺利的编译都都搞不懂,更别提如何选择性的去编译包了. 给大家推荐一个很好用的ffmpeg 库,mobile-ffmpeg githup :https://github.com/tanersener/mobile-f...原创 2020-06-02 10:16:40 · 2368 阅读 · 0 评论 -
android 10 targetSdkVersion 29 真的不能在sd创建文件夹了?
android 10 对系统的文件系统做了很多优化,为了更好的保护用户隐私,同时对开发者来时说也是一种约束,不能再取得了,WRITE_EXTERNAL_STORAGE 权限后可以肆无忌惮的在用户的根目录下创建数据和文件。 今天我就遇到了一个问题,因为先前了解过10的文件系统 优化,但是时间久了忘记了,几天在我的10 的机子上测试,创建了一个项目,在创建目录的时候竟然不成功,权限完全没有问题,代码也没有问题,但是就是不成功,提示权限被拒绝,这是咋回事,这个纠结了半天时间,一直没有找到问题,...原创 2020-05-31 20:27:11 · 3411 阅读 · 0 评论 -
android binder 机制概述
首先从概念上来说,什么是Binder,简单来说Binder是一种跨进程的通讯方式,从Android Framewok 来说,binder是serviceManager连接各种manger 和相应ManagerService 的桥梁,而binder 可以充当进程的桥梁,它是android ipc 机制中的一种。 直观的使用就是aidl,AIDL是Android中IPC(...原创 2020-05-03 17:03:14 · 1160 阅读 · 0 评论 -
多进程间通信Messenger使用
Messenger 信使 也是进程间通信的一种方式,但是它的好处在于不用像aidl 一样必须要定义aidl 接口,然后通过接口来通信,本质上messenger 的实现底层也是通过aidl 实现的。实现原理是客户端通过绑定服务端service ,通过返回的IBundle,生成获取到服务端的Messenger对像,然后通过服务端的Messenger 对象将客户端的Messenger 发送到服务端,...原创 2020-04-05 15:29:11 · 355 阅读 · 0 评论 -
多进程间通信AIIDL使用
AIDL 是Android上提供的一套进程间通讯的机制,在多进程间的通信方们他是比较常见的,那为什么要用aidl 呢,我们的四大组件都可以实现跨进程,我只能说使用的场景有所不同罢了。1.activity 可以跨进程调用另一个进程 的activity 并且也可以携带参数,但是局限性比较大,只能通过intent 在启动时传递。2.BroadcastReceiver 广播接收器,他可以无限次的发...原创 2020-04-03 21:45:32 · 361 阅读 · 0 评论 -
EventBus源码解析之消息发送
上一篇我们讲了eventBus 的使用和注册 EventBus使用及源码解析之注册 建议在看消息发送的时候先看上一篇,这篇讲到的有些东西在上边提过的我就不再多说了。消息的发送有两种方法,post和postSticky,其实postSticky 是对post的又一次包装,不过是postSticky 多了一步操作,它将要发送的消息重新缓存到了stickyEvent中了,操作完成后还是调...原创 2020-03-27 10:52:19 · 227 阅读 · 0 评论 -
EventBus使用及源码解析之注册
EventBus 我们叫它事件总线,他能够将之前我们一些复杂的功能简单化,比如一个页面发送数据,其他多个页面也会收到消息,用它就比较方便和简单,并且包也不大。实现方式: 1.它是通过观察者模式实现事件的传递,通过注册事件(发布者),反注册事件(取消发布),及注解标记方法(订阅)来实现应用。 2.内部实现通过获取订阅方法的注解获取配置信息并通过反射机制调用消费事件。事件类型分...原创 2020-03-27 09:53:28 · 525 阅读 · 0 评论 -
单例模式--双重检验锁真的线程安全吗
之前我们使用单例模式经常会用到两种方式,一种是懒汉是双重锁,一种是静态内部类,可以看下这个深入理解单例模式:静态内部类单例原理,但是其中用到的双重锁懒汉模式 其实并非是真正的线程安全的。例如这样:public static Singleton getSingleton() { if (instance == null) { ...原创 2020-03-26 10:11:00 · 1144 阅读 · 0 评论 -
java反射invoke方法的使用
invoke 主要是用来调用某个类中的方法的,但是他不是通过当前类直接去调用而是通过反射的机制去调用。在这之前我们先新建一个实体类,一会会用到。public class TestMode { private static final String TAG = "TestMode"; private int age; String name; int...原创 2020-03-26 08:25:11 · 18838 阅读 · 0 评论 -
Android 各系统版本的重要特性4.x-10.0
1. 4.X 1.webView(4.4)对Http与https安全认证区分默认不保存cookie 2.人脸识别 3.截屏2. 5.x 1.material design 风格的引入 2.引入cardView RecyclleVIew 等新组件的引入 3.支持64位系统 4.安装时控制权限3. 6.x 1.新增运行时权限...原创 2020-03-20 13:43:14 · 593 阅读 · 0 评论 -
Gson中几个注解类分析
在Gson 中定义了五个个注解类,位于com.google.gson.annotations 包下:Expose,JsonAdapter,SerializedName,Since,Until五个类Expose 类是用于注解操作某些字段序列化和反序列化过程中是否被操作@Documented@Retention(RetentionPolicy.RUNTIME)@Target(El...原创 2020-03-17 19:36:31 · 547 阅读 · 0 评论 -
如何自定义一个注解并获取注解
注解是跟多java 架构经常用到的,那如何自己定义一个注解,今天我们学习注解的定义和使用。所有的注解类型都继承自这个普通的接口(Annotation)。元注解『元注解』是用于修饰注解的注解通常有以下几种@Target:注解的作用目标 @Retention:注解的生命周期 @Documented:注解是否应当被包含在 JavaDoc 文档中 @Inherited:是否允许子...原创 2020-03-17 18:45:08 · 1510 阅读 · 0 评论 -
Gson中Expose注解的使用
接着上篇SerializedName注解的使用 来看下Expise 注解的使用。该注解只有在 你使用GsonBuilder去构造Gson时,同时调用excludeFieldsWithoutExposeAnnotation()方法 才起作用。public @interface Expose { /** * If {@code true}, the field marked ...原创 2020-03-17 14:20:01 · 3008 阅读 · 0 评论 -
Gson源码解析之-fromJson
上面我们学习了gson 的序列化过程方法 toJson 的源码,相信对很多的流程有了一个了解,紧接着我们来学习下gson反序列化过程,fromJson .还是老样子,代码一点一点看。我们先模拟一个反序列化过程String json="{\"age\":30,\"name\":\"明\",\"len\":170]}";TestMode jsTestMode=gson.fromJson(j...原创 2020-03-16 20:34:09 · 2177 阅读 · 0 评论 -
Gson源码解析之-toJson
Gson 是开发中我们经常使用的一款json 解析框架,也是Google 推出的诸多良品之一,今天我们就从源码的角度看下gson 是如何来做序列化的,即如何通过toJson方法来做序列化的。首先是获取Gson对象,只是Gson提供的对外方法类,有两种方式获取Gson对象,大概了解下。 GsonBuilder gsonBuilder=new GsonBuilder();...原创 2020-03-13 16:37:12 · 2561 阅读 · 0 评论 -
反射的简单使用
Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。当然,平时我们在项目中使用的几率比较小,一般是用在框架上的,从而使扩展性更强。下面我们就简单写...原创 2020-03-11 17:44:14 · 104 阅读 · 0 评论 -
Java泛型解惑上界通配符和下界通配符
<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)”<? super T>:是指 “下界通配符(Lower Bounds Wildcards)”1 为什么要用通配符和边界?使用泛型的过程中,经常出现一种很别扭的情况比如我们有Fruit类,和它的派生类Appleclass Fruit {}class Apple...转载 2020-03-09 12:18:48 · 760 阅读 · 2 评论 -
Android 进程间通信 BroadcastReceiver
进程间通信,广播接收者,这个我们经常会用到,比如检测网络变化,这个还是比较实用的,但是如何实现,其实很简单,那我们就开始吧。借助于之前activity 通信的demo 我们继续。Activity 跨进程通信这个比较简单我们一切从简,如果还有不懂后边会贴出代码下载地址1.新建项目,接收Activity (ReceiveActivity)中自定类继承自BroadcastReceiver 并...原创 2018-12-25 13:33:20 · 484 阅读 · 0 评论 -
List ArrayList LinkedList 初探
集合是我么开发中经常使用的,常使用的有List ArrayList LinkedList,他们的应用场景及原理性能到底是如何呢,本篇将从以下几点讲解实现及原理应用场景及优缺点分析总结一.实现及原理1.1 ListList 是一个接口,它继承于Collection的接口。List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,原创 2018-12-25 13:36:55 · 125 阅读 · 0 评论 -
Android 子线程中更新UI的几种方法 及原理
在开发中我们经常会遇到在子线程中更新ui的操作,那我们今天就介绍下几种常用的方式 1.使用 runOnUiThread方法更新ui 2.view.post 方法 3.view.postDelaged 方法 4.handler.send...方法更新ui1.使用 runOnUiThread方法更新ui 这个方法在Activity 中 ,所以只有在他的子类或者拿到他...原创 2019-01-13 11:21:24 · 896 阅读 · 0 评论 -
AsyncTask使用及实现原理 一
讲解顺序:1.AsyncTask简单介绍2.主要方法及作用3.应用与使用4.实现原理分析1.AsyncTask简单介绍 AsyncTask是开发中常用的异步实现工具,又因为其无需再通过Handler 更新ui ,所以使用起来比较方便,在开发中使用频率较高。内部主要由Handler ,线程池 实现类ThreadPoolExecutor 等构成,主要实现了异步执行任务并且可执...原创 2019-02-15 14:46:29 · 310 阅读 · 0 评论 -
AsyncTask使用及实现原理 二
AsyncTask是如何更新进度上一篇我们讲了AsyncTask 的基本使用及原理分析AsyncTask使用及实现原理,但是篇幅有点长了,最后没有介绍在执行异步任务时是如何更新进度的。这篇我们接着上一篇继续介绍AsyncTask是如何跟新进度的。在这之前我们先来介绍进度执行及更新的两个方法。 /** * 任务的执行进度 * @para...原创 2019-03-08 15:31:00 · 161 阅读 · 0 评论 -
view 的测量过程源码分析及应用
讲解过程:1.测量方式分析,比对不同测量模式的差异,包括应用分析。2.分析源码中view的具体绘制流程3.测量的实际应用1.测量方式分析,对不同测量模式的差异,包括应用分析。说起测量我们最直观和常见的是onMeasure方法。public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)这里会...原创 2019-03-26 09:54:55 · 130 阅读 · 0 评论 -
view 的onLayout过程源码分析及应用
上一节我们讲了view 的测量过程,接着上节讲讲onLayout view的摆放过程。讲解顺序:1.控件摆放原理分析2.原生控件源码摆放过程分析3.如何在自定义的viewGroup中根据需求摆放控件1.控件摆放原理分析首先说控件的摆放是建立在控件的测量的基础之上的,试想,如果你连子控件的大小,以及对应的父控件的大小都不知道,你如何去摆放,即使摆放了也没有实际意义,因为父类不...原创 2019-04-09 11:32:46 · 262 阅读 · 0 评论 -
webView 中js保存cookie后立即杀掉进程后重启无法获取保存的cookie
首先说下为啥会产生这个问题,其实浏览器是有一套缓存机制的,在android中,我们可以指定webview 的缓存路径,默认是在data/data/包名/app_webview/Cookies 文件,cookies就是cookie存储的地方。前端在使用js等做缓存时,是不会立即缓存到cookies中的,有一个延时操作,大概十几秒吧,天哪要十几秒,这要出多少bug啊。所以就有了下文。刚开始我...原创 2019-05-10 14:26:02 · 1642 阅读 · 0 评论 -
view 的onDraw过程源码分析及应用
上一节我们讲了view 的摆放过程,接着上节讲讲onDraw view的绘制过程,这个方法在平时开发过程中使用的几率还是比较高的,有必要深入的了解下。讲解顺序:1.控件绘制原理分析2.onDraw 中绘制基本图形及文字3.绘制路径,橡皮及自定义按钮点击事件1.控件绘制原理分析onMeasure 用于view 的测量,包括测量模式和测量值,具体就是根据父类和自身的属性...原创 2019-05-31 17:54:41 · 471 阅读 · 0 评论 -
简单的钟表自定义控件
简单的钟表自定义控件效果图:代码如下:`/**Created by LCTTime:2019/6/11 10:36.Annotation:/public class MyClockView extends View {Context context;float strokeWidth = 26;/*时针宽度/float hourHandsStrokeWidt...原创 2020-03-11 19:43:59 · 108 阅读 · 0 评论