自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 蓝牙通信,完整的通信流程!

无线通信方案,有三种方案可以实施: 1、NFC 2、蓝牙 3、WIFI 下面是对这三个知识点做的一个总结,参照对比可以选择合适的方案。而本章着重讲的蓝牙之间通信。 首先介绍一下蓝牙的两个广播Receiver。 第一个:蓝牙状态的改变是通过广播接收到的。 // 注册蓝牙状态接收广播 IntentFilter intentFilter = new nt

2017-12-28 16:30:34 51168 5

原创 Binder是怎么跨进程传输的?——源码分析(三)

Binder是怎么跨进程传输的?Parcel的writeStrongBinder和readStrongBinderBinder在Parcel中存储原理,flat_binder_object说清楚binder_node, binder_ref目标进程根据binder_ref的handle创建BpBinder由BpBinder再往上到BinderProxy到业务层的Proxy这篇文章...

2020-04-26 19:03:36 744

原创 Binder完整的IPC通信流程——源码分析(二)

今天这篇文章是通过看源码的方式做总结:从客户端的应用层到binder驱动,然后从binder驱动在到服务端的应用层Binder的协议通信流程还是根据这幅图,我们来看下源码,从客户端到服务端的流程:1、客户端Proxy调用fromwork的是java层BinderProxy2、fromwork的是java层BinderProxy调用 native的Bpbinder3、nativ...

2020-04-26 18:52:27 726

原创 Binder的基本介绍,Linux进程通信的几种方式、手写进程通信代码(一)

Binder的概述:Binder是干嘛的?为什么选择Binder作为最主要的IPC通信机制绘制Binder的通信架构图,讲述原理手写一个AIDLLinux系统的通信方式先介绍Linux进程通信的方式:管道Socket共享内存信号1、管道半双工,单向的,数据只能在一个方向流,要么读,要么写 pipe(fds):Linux提供的api,可以生成两个字符,一个...

2020-04-26 18:21:38 1096 1

原创 二叉树基本概念,前中后序遍历,删除!

二叉树为什么需要树这种数据结构1) 数组存储方式的分析优点: 通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点: 如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低2) 链式存储方式的分析优点: 在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺点: 在进行检索时,效率仍然较...

2020-01-16 16:55:27 479 2

原创 Android系统启动过程分析

主要流程init进程启动过程init进程是Android系统中用户空间的第一个进程。进程号为1。第一步:启动电源当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。第二步:执行引导程序(Boot Loader)通常在运行Android系统之前会先执行Boot Loader引导程序,它不属于Android系统,常见的引导程序有:redb...

2020-01-15 18:03:41 1942

原创 HashMap源码解析

HashMap: 数据结构如下:put方法:需要注意的是什么时候转红黑树:链表长度 >= 7 && 数组长度 >= 64 才会转红黑树public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } /** ...

2020-01-14 14:28:53 228

原创 查找算法总结:线性查找、二分查找、插值查找

查找算法介绍在 java 中,我们常用的查找有四种:1) 顺序(线性)查找2) 二分查找/折半查找3) 插值查找4) 斐波那契查找1、线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提 示找到,并给出下标值 /*** 这里我们实现的线性查找是找到一个满足条件的值,就返回*/ pub...

2019-12-21 14:37:27 450

原创 快速排序、归并排序、基数排序(桶排序)!

快速排序分析推导图class Untitled { public static void main(String[] args) { System.out.println("hello https://tool.lu/"); int[] array = {6,1,2,7,9,3,4,5,10,8}; quick(array, 0...

2019-12-03 21:16:37 320

原创 冒泡排序、选择排序、插入排序、希尔排序(推导过程~!)

常见的排序算法:一、冒泡排序:演示冒泡过程的例子冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 fl...

2019-11-20 21:54:40 297

原创 一篇文章让你彻底了解算法的时间复杂度O(n)!!!

一、时间频度基本介绍:时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间 就多。一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。[举例说明]比如计算 1-100 所有数字之和, 我们设计两种算法:举例说明-忽略常数项结论:1) 2n+20 和 2n 随着 n 变大,执行曲线无限接近, 20 可以忽略2) 3n+10 ...

2019-11-19 15:56:23 7670

原创 数组实现栈、中缀计算器、逆波兰后缀计算器、 中缀转后缀完整版本!

栈的介绍:栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后...

2019-11-15 17:43:42 211

原创 java 实现单链表、双链表增删改查、排序、约瑟夫等功能实现

总结:1、链表中每个结点的next引用都相当于一个指针指向另一个结点2、在单链表中通常使用head引用指向单链表的首结点,由head引用完成对整个链表中所有结点的访问3、单链表的一个重要特性就是只能通过前驱结点找到后续结点,不能从后续结点找到前驱结点单链表的增、删、改、查实现:// 根据条件排序添加/*** 单链表的实现*/public class SingleLinkdL...

2019-11-06 15:53:29 281 2

原创 java 数组实现单项队列和环形队列!

数组实现队列:普通单项队列环形队列一、实现普通队列1) 将尾指针往后移:rear+1 , 当 front == rear 【空】2) 若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear 所指的数组元素中,否则无法存入数据。rear == maxSize - 1[队列满]public static void main(String[] ar...

2019-11-05 14:45:37 217

原创 EventBus实现原理(手写核心逻辑)

EventBus核心流程图总结:发布者post发送一个事件,处理器根据发布的数据类型,然后分配给订阅者方法回调里面。先注册通过反射拿到所有的这个类的方法判断这个类有没有注解,然后存起来。然后获取到注解的值来判断需不需要转换线程在post方法里面通过反射,调用这个类方法。第一步: 声明Subscribe注解第二步:创建注解里面的类型,也就是线程类型第三步: 订阅者先进行注册...

2019-08-19 08:42:20 591

原创 TCP为什么三次握手,四次挥手?(权威版)

为什么三次挥手?TCP 协议的双方通信(客户端/服务端), 为了实现可靠数据传输,有序性,都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认,序号没有同步,数据就会乱序...

2019-08-18 19:03:15 321

原创 Android hook原理及APP安全

Xposed原理如何保证APP最安全。这篇文章不对逆向和hook进行分析,如有不知道的,请看我之前的文章。原理: 通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持Zygote启动进程时1、都会将这个D...

2019-08-18 13:34:29 7107 1

原创 Android 线程池介绍

线程池的好处线程池的参数详解线程池种类介绍线程的工作原理 + 策略线程池的Api细节为什么使用线程池?每个线程的创建、消亡是有开销的,线程池可以重用处在的线程,避免这些开销可以控制最大线程的并发数量,提高系统资源的使用率提供强大API线程池参数详解corePoolSize: 核心线程的数量。 当提交一个任务到线程池时,线程池会创建一个核心线程来执行任务,即使其他空...

2019-08-18 11:02:29 305

原创 线程安全、线程间的通信这一篇就够了。

线程安全解释:我画了一张图来解释:下面代码是一个例子:public class ThreadUnSecurity { static int tickets = 10; class SellTickets implements Runnable{ @Override public void run() { // 未加同...

2019-08-17 13:25:19 551

原创 Coco2dx - lua 实现连连看,很全的一篇,需要的可以直接用!!

大家先看效果我把代码粘贴进来,大家可以直接看,注释写的很清楚的require "app/views/newScene"local MainScene = class("MainScene", cc.load("mvc").ViewBase)-- numbersTable[string.format("%d", i), int转换字符转-- 保存view的集合local list =...

2019-08-14 16:36:38 621

原创 一篇文章让你清楚DVM、JVM、ART、JIT、ODEX、VDEX、DEX、oat

DVM 和 JVM的区别 1、DVM基于寄存器,JVM基于栈。 DVM效率要更高 解释为什么寄存器效率更高? a、 因为寄存器是CPU中的一部分, 堆栈是内存的一种结构。 内存是CPU和硬盘之间的通道。 寄存器是CPU的储存器,速度快。 b、 一个是直接对CPU进行操作,一个是对内存操作,然后在转化成CPU指令操作。所以寄存器效率更...

2019-08-12 12:01:54 2144

原创 ARouter路由实现原理(手写核心原理,实现通信一目了然)

组件化通信,跳转有两种实现方案:核心:编译时生成文件,运行时执行文件第一种方案: 使用Intent 隐士跳转方式。 /***隐士跳转首页 清空现有栈,创建新栈*/public static void newTaskMainActivity(Activity activity){Intent intent = new Intent();...

2019-08-08 15:02:26 633

原创 Android 静态代理和动态代理 看这一篇就够了

静态代理和动态代理根据加载被代理类的时机不同,将代理分为静态代理和动态代理。编译时就确定了被代理的类是哪一个,那么就可以直接使用静态代理;运行时才确定被代理的类是哪个,那么可以使用类动态代理。1、静态代理public interface Subject { public void sayGoodBye(); public void sayHello(String st...

2019-08-08 11:24:13 4032

原创 Android 签名机制原理解析和V1 、V2签名区别

一、什么是签名? 是确保消息来源的真实性 是确保消息不会被第三方篡改 1.基本信息基础必备1.1 消息摘要消息摘要,又称数字摘要 或 数字指纹. 简单来说,消息摘要就是在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的Hash值,这个Hash值即是消息摘要。正是由于以上特点,消息摘要算法被广泛应用在“数字签名”领域,作为对明文的...

2019-08-06 14:16:18 1179

原创 Android多进程通信、Binder、IPC机制这一篇就够了!!!

Android IPC简介IPC含义:进程间通信,是指两个进程间尽享数据交换。多进程使用场景:应用根据业务需求需要多进程来实现为了加大一个应用可使用的内存所以需要多进程来获取多份内存空间。Android中的多进程模式一般情况下指一个应用存在多个进程。在Android中使用多进程只有一种办法,就是给四大组件(Activity、Service、Receiver、ContentProv...

2019-04-11 15:13:09 1075

原创 Android 的性能优化总结!!!

Android优化一共分为几个部分:1、布局UI的加载的优化2、APP启动的优化3、内存的优化4、电量的优化5、APP瘦身的优化一、布局UI的加载的优化当一个页面非常复杂的时候,比如首页,有很复杂的UI视图,和复杂的动画效果,那么我们进入这个页面的时候,中间会卡顿几秒(时间不定),根本原因就是因为,UI层级嵌套太复杂,和一些自定义View太复杂导致的。所以这也是我们解决问题的核心。...

2019-04-04 14:54:35 239

原创 绝对干货, 热修复原理,实现方式总结!!!

今天总结一下热修复的实现方式有二种方案: 1、修改native层代码实现 2、通过函数插桩实现、双亲委托模式实现第一种方案(修改native层代码,替换结构体):AndFix实现原理源码解析:1、mPatchManager.init(“版本号”)主要是对patch文件的增加和删除, 内部会对上一次版本号进行判断,如果相同则继续添加,如果不同则删除所有的patch文件对于patch文...

2019-04-02 15:43:43 475

原创 Android的内存分配、管理、OOM这一篇文章就够够的了!

Android的内存分配和管理为两个大板块: (Android手机系统和手机应用APP)一、Android 手机系统的内存分配和管理主要3点内容介绍-Android 系统的低内存工作机制:-Android 应用内存的使用情况:-如何减少Android 应用内存的占用:1、Android 系统的低内存工作机制:首先给大家提出一个问题,为什么有的手机打开应用多了,在使用的时候回特别卡呢。...

2019-03-12 11:45:34 1101

原创 Java虚拟机、Minot GC、Full GC机制的总结(完整版)

JVM结构图类加载器把字节码文件(.class)文件加载JVM虚拟机中的过程以上是Java虚拟机的结构,和编译加载流程。JVM内存管理Java栈区:作用: 它存放的是Java方法执行时的所有的数据组成: 由栈帧组成,一个栈帧代表一个方法的执行Java栈帧:每个方法从调用到执行完成就对应一个栈帧,在虚拟机中入栈到出栈。(局部变量、栈操作数、动态连接、方法出口)本地方法栈...

2019-03-07 18:29:41 853

原创 Android__逆向__xpose使用

第一步:安装xposeapk:第二步: 注册清单文件第三步:设置启动入口第六步:重启

2019-03-05 15:31:23 384

原创 Android_逆向__ 快速Hook代码搭建之cydia Substrate

函数钩子今天给大家介绍一个吊炸天的操作,这次不需要修改apk的源代码或者smali文件, 直通通过函数钩子来修改,apk的函数执行内容。函数钩子: 顾名思义,就是对于函数进行挂钩,可以影响整个函数的执行。挂钩后注入的代码就可以接管整个函数,修改函数的参数,返回值等等。会玩的,还能够修改整个函数的行为,这个是真正的只有想不到,没有做不到!!!本次实现功能,用函数钩子,下钩getColor方法,...

2019-03-05 15:02:17 526

原创 Android_ClassLoader加载机制、双亲委托、类加载共享、隔离等功能

ClassLoader种类:-BootClassLoader-PathClassLoader-DexClassLoader-BaseDexClassLoaderBootClassLoader: 加载framework 层的字节码文件。PathClassLoader: 加载安装应用里面的字节码文件。DexClassLoader:指定目录中的字节码class文件。BaseDexClas...

2019-03-04 17:28:49 985

原创 Android_逆向开发_Smali基础语法和介绍!

在开始逆向开发之前,先给大家介绍几个概念什么是smali语言? smali语言是是Dalvik的反汇编语言,是最终虚拟机识别的语言。也就是说无论App怎么混淆,怎么加密,smali语言都是不能改变的,我们可以改smali从而实现改源码的功能!下面给大家介绍一下Smali的基本语法:Smali JAVA V void...

2019-03-01 16:11:05 980

原创 Android_高级进阶_Hook插件开发__在任何APP添加自己的功能

如何在一个陌生的APP中插入自己想要的插件功能!本章实现目标:教你如何在一个陌生APP中,插入自己想要实现的启动图。开始之前先介绍一下,我们的操作是在反编译之后的代码上进行操作的。更要清楚的是java文件在编译之后对应的语言是smali语言。如下:ok,进入我们的正题,如何以上工具不清楚的请看我另一篇文章介绍!第一步:首先我们通过工具Killer,反编译你要修改的App。第二步:在A...

2019-02-28 14:57:49 1400 2

原创 Android高级进阶__class & dex文件详解

本章概述:-class文件结构深入解析-dex文件结构深入解析-class与dex文件对比-基本概念:class文件就是一种文件格式,被JVM识别。如下图java、scala、python等语言都可以编译生成class文件,让jvm识别如何生成class文件:1、通过IDE自动帮我们build2、手动通过javac去生成class文件3、通过java命令去执行class文件...

2019-02-18 10:59:37 1619 1

原创 Android高级进阶__ANR的定位、检测和避免

ANR的产生原因: 只有当UI线程响应超时才会引起ANR,超时产生原因一般有两种。 1.当前的事件没有机会得到处理,例如UI线程正在响应另一个事件,当前事件由于某种原因堵塞了。 2.当前的事件正在处理,但是由于耗时太长没能及时完成。根据ANR产生的原因不同,超时时间也不同,从本质上讲,产生ANR的原因有三种,大致可以对应到Android中四大组件中的三个(Activity/View、Br...

2019-02-13 10:54:13 1254 1

原创 WebView之性能优化,优化加载速度,缓存机制详解,解压服务器!

首先先声明一下工作中遇到的问题,我们项目在晚上九点的时候,是一个高峰期。由于服务器高并发没有优化好,在短时间内要做一下解决方案。还有一个是优化加载webview的加载速度。这个放在后面说。场景,晚上九点,是用户活跃高峰期,导致原生App端,打开H5页面,需要请的CSS和JS这些文件特别的慢,所有H5页面会在App上显示布局错乱,显示有问题等情况!以下做出了几种方案。(当然后台解决高并发是核心关键第一

2018-04-10 15:54:44 2398 3

原创 andorid通过代码让url转换成二维码,很常用。

1.android 有自带的jar包可以生成二维码core-3.0.0.jar,其中的com.google.zxing包2.写一个二维码生成的工具类,网上搜的话应该一大堆。package com.example.administrator.twocodedemo; import android.content.Context; import android.graphics.Bitmap;

2018-03-21 14:54:21 1910 1

原创 构建者模式,优化真实案例!!

拿我们上一篇的多线程下载案例,来用构建者模式优化一下。 直接上代码,代码是最好的解释:最终调用效果如: // 构建者模式初始化数据。 DownloadConfig builder = new DownloadConfig.Builder() .setCoreThreadSize(2) .setMaxThr

2018-03-08 16:39:56 224

原创 Android 多线程下载文件原理霸气解析介绍 (完结版)-----greendao数据库的存储,断点下载

这篇文章主要介绍一下,如果暂停了,或者网段了,然后有恢复了,接着之前的继续下载。首先我们先添加数据库 greendao步骤1:首先在项目中创建一个java的Modle。如图 步骤2:创建DbGenerate文件,public class DbGenerate { public static void main(String args[]) { // 版本号 \ 包名

2018-03-06 16:19:34 356

空空如也

空空如也

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

TA关注的人

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