![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术分析
文章平均质量分 73
Android_大佬
这个作者很懒,什么都没留下…
展开
-
查找算法总结:线性查找、二分查找、插值查找
查找算法介绍在 java 中,我们常用的查找有四种:1) 顺序(线性)查找2) 二分查找/折半查找3) 插值查找4) 斐波那契查找1、线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提 示找到,并给出下标值 /*** 这里我们实现的线性查找是找到一个满足条件的值,就返回*/ pub...原创 2019-12-21 14:37:27 · 463 阅读 · 0 评论 -
一篇文章让你彻底了解算法的时间复杂度O(n)!!!
一、时间频度基本介绍:时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间 就多。一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。[举例说明]比如计算 1-100 所有数字之和, 我们设计两种算法:举例说明-忽略常数项结论:1) 2n+20 和 2n 随着 n 变大,执行曲线无限接近, 20 可以忽略2) 3n+10 ...原创 2019-11-19 15:56:23 · 7958 阅读 · 0 评论 -
数组实现栈、中缀计算器、逆波兰后缀计算器、 中缀转后缀完整版本!
栈的介绍:栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后...原创 2019-11-15 17:43:42 · 287 阅读 · 0 评论 -
java 实现单链表、双链表增删改查、排序、约瑟夫等功能实现
总结:1、链表中每个结点的next引用都相当于一个指针指向另一个结点2、在单链表中通常使用head引用指向单链表的首结点,由head引用完成对整个链表中所有结点的访问3、单链表的一个重要特性就是只能通过前驱结点找到后续结点,不能从后续结点找到前驱结点单链表的增、删、改、查实现:// 根据条件排序添加/*** 单链表的实现*/public class SingleLinkdL...原创 2019-11-06 15:53:29 · 291 阅读 · 2 评论 -
绝对干货, 热修复原理,实现方式总结!!!
今天总结一下热修复的实现方式有二种方案: 1、修改native层代码实现 2、通过函数插桩实现、双亲委托模式实现第一种方案(修改native层代码,替换结构体):AndFix实现原理源码解析:1、mPatchManager.init(“版本号”)主要是对patch文件的增加和删除, 内部会对上一次版本号进行判断,如果相同则继续添加,如果不同则删除所有的patch文件对于patch文...原创 2019-04-02 15:43:43 · 505 阅读 · 0 评论 -
Android多进程通信、Binder、IPC机制这一篇就够了!!!
Android IPC简介IPC含义:进程间通信,是指两个进程间尽享数据交换。多进程使用场景:应用根据业务需求需要多进程来实现为了加大一个应用可使用的内存所以需要多进程来获取多份内存空间。Android中的多进程模式一般情况下指一个应用存在多个进程。在Android中使用多进程只有一种办法,就是给四大组件(Activity、Service、Receiver、ContentProv...原创 2019-04-11 15:13:09 · 1122 阅读 · 0 评论 -
Android 的性能优化总结!!!
Android优化一共分为几个部分:1、布局UI的加载的优化2、APP启动的优化3、内存的优化4、电量的优化5、APP瘦身的优化一、布局UI的加载的优化当一个页面非常复杂的时候,比如首页,有很复杂的UI视图,和复杂的动画效果,那么我们进入这个页面的时候,中间会卡顿几秒(时间不定),根本原因就是因为,UI层级嵌套太复杂,和一些自定义View太复杂导致的。所以这也是我们解决问题的核心。...原创 2019-04-04 14:54:35 · 268 阅读 · 0 评论 -
Android的内存分配、管理、OOM这一篇文章就够够的了!
Android的内存分配和管理为两个大板块: (Android手机系统和手机应用APP)一、Android 手机系统的内存分配和管理主要3点内容介绍-Android 系统的低内存工作机制:-Android 应用内存的使用情况:-如何减少Android 应用内存的占用:1、Android 系统的低内存工作机制:首先给大家提出一个问题,为什么有的手机打开应用多了,在使用的时候回特别卡呢。...原创 2019-03-12 11:45:34 · 1199 阅读 · 0 评论 -
Java虚拟机、Minot GC、Full GC机制的总结(完整版)
JVM结构图类加载器把字节码文件(.class)文件加载JVM虚拟机中的过程以上是Java虚拟机的结构,和编译加载流程。JVM内存管理Java栈区:作用: 它存放的是Java方法执行时的所有的数据组成: 由栈帧组成,一个栈帧代表一个方法的执行Java栈帧:每个方法从调用到执行完成就对应一个栈帧,在虚拟机中入栈到出栈。(局部变量、栈操作数、动态连接、方法出口)本地方法栈...原创 2019-03-07 18:29:41 · 895 阅读 · 0 评论 -
Android_ClassLoader加载机制、双亲委托、类加载共享、隔离等功能
ClassLoader种类:-BootClassLoader-PathClassLoader-DexClassLoader-BaseDexClassLoaderBootClassLoader: 加载framework 层的字节码文件。PathClassLoader: 加载安装应用里面的字节码文件。DexClassLoader:指定目录中的字节码class文件。BaseDexClas...原创 2019-03-04 17:28:49 · 1009 阅读 · 0 评论 -
Android__逆向__xpose使用
第一步:安装xposeapk:第二步: 注册清单文件第三步:设置启动入口第六步:重启原创 2019-03-05 15:31:23 · 394 阅读 · 0 评论 -
Android 静态代理和动态代理 看这一篇就够了
静态代理和动态代理根据加载被代理类的时机不同,将代理分为静态代理和动态代理。编译时就确定了被代理的类是哪一个,那么就可以直接使用静态代理;运行时才确定被代理的类是哪个,那么可以使用类动态代理。1、静态代理public interface Subject { public void sayGoodBye(); public void sayHello(String st...原创 2019-08-08 11:24:13 · 4121 阅读 · 0 评论 -
ARouter路由实现原理(手写核心原理,实现通信一目了然)
组件化通信,跳转有两种实现方案:核心:编译时生成文件,运行时执行文件第一种方案: 使用Intent 隐士跳转方式。 /***隐士跳转首页 清空现有栈,创建新栈*/public static void newTaskMainActivity(Activity activity){Intent intent = new Intent();...原创 2019-08-08 15:02:26 · 655 阅读 · 0 评论 -
Android 签名机制原理解析和V1 、V2签名区别
一、什么是签名? 是确保消息来源的真实性 是确保消息不会被第三方篡改 1.基本信息基础必备1.1 消息摘要消息摘要,又称数字摘要 或 数字指纹. 简单来说,消息摘要就是在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的Hash值,这个Hash值即是消息摘要。正是由于以上特点,消息摘要算法被广泛应用在“数字签名”领域,作为对明文的...原创 2019-08-06 14:16:18 · 1226 阅读 · 0 评论 -
TCP为什么三次握手,四次挥手?(权威版)
为什么三次挥手?TCP 协议的双方通信(客户端/服务端), 为了实现可靠数据传输,有序性,都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认,序号没有同步,数据就会乱序...原创 2019-08-18 19:03:15 · 361 阅读 · 0 评论 -
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 · 662 阅读 · 0 评论 -
一篇文章让你清楚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 · 2229 阅读 · 0 评论 -
EventBus实现原理(手写核心逻辑)
EventBus核心流程图总结:发布者post发送一个事件,处理器根据发布的数据类型,然后分配给订阅者方法回调里面。先注册通过反射拿到所有的这个类的方法判断这个类有没有注解,然后存起来。然后获取到注解的值来判断需不需要转换线程在post方法里面通过反射,调用这个类方法。第一步: 声明Subscribe注解第二步:创建注解里面的类型,也就是线程类型第三步: 订阅者先进行注册...原创 2019-08-19 08:42:20 · 606 阅读 · 0 评论 -
线程安全、线程间的通信这一篇就够了。
线程安全解释:我画了一张图来解释:下面代码是一个例子:public class ThreadUnSecurity { static int tickets = 10; class SellTickets implements Runnable{ @Override public void run() { // 未加同...原创 2019-08-17 13:25:19 · 702 阅读 · 0 评论 -
Android 线程池介绍
线程池的好处线程池的参数详解线程池种类介绍线程的工作原理 + 策略线程池的Api细节为什么使用线程池?每个线程的创建、消亡是有开销的,线程池可以重用处在的线程,避免这些开销可以控制最大线程的并发数量,提高系统资源的使用率提供强大API线程池参数详解corePoolSize: 核心线程的数量。 当提交一个任务到线程池时,线程池会创建一个核心线程来执行任务,即使其他空...原创 2019-08-18 11:02:29 · 330 阅读 · 0 评论 -
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 · 7196 阅读 · 1 评论 -
Android_逆向__ 快速Hook代码搭建之cydia Substrate
函数钩子今天给大家介绍一个吊炸天的操作,这次不需要修改apk的源代码或者smali文件, 直通通过函数钩子来修改,apk的函数执行内容。函数钩子: 顾名思义,就是对于函数进行挂钩,可以影响整个函数的执行。挂钩后注入的代码就可以接管整个函数,修改函数的参数,返回值等等。会玩的,还能够修改整个函数的行为,这个是真正的只有想不到,没有做不到!!!本次实现功能,用函数钩子,下钩getColor方法,...原创 2019-03-05 15:02:17 · 539 阅读 · 0 评论 -
Android 多线程下载文件原理霸气解析介绍 -----文件的下载(3)
1、首先我们先创建好下载的位置–根据url创建文件。 /** * <p>Title: FlieStorageManager</p > * <p>Description: TODO</p > * <p>Company: ihaveu</p > * * @author MaWei * @date 2018/2/5 */public class FlieStorageManager {原创 2018-02-13 12:14:01 · 548 阅读 · 1 评论 -
MadiaPlayer之Android视频播放器完整解析!!!
上篇文章我们讲了音乐播放器,这篇我们来讲一下视频播放器。 MadiaPlayer不是特别了解的请看上一篇文章的解析图。这次我们直接写了首先,先看一下效果: 本次介绍的功能点: 1、读取本地视频文件,保存在List中 2、设置播放暂停 3、设置进度条和音量的关联 4、设置进度条和视频进度的关联 5、设置缓冲效果 6、设置全屏 7、获取网速 8、自定义监听卡 9、滑动屏幕原创 2018-01-18 10:22:37 · 890 阅读 · 0 评论 -
MediaPlayer之音乐播放器完整解析
MediaPlayer 是一款音乐播放器也是一款视频吧哦,这篇先介绍一个音乐播放器吧!先看一下做好的效果吧! 这次介绍的功能点: 1、本地Sd卡中搜索音乐,并保存在List中 2、服务与Activity交互,可以用AIDL 、Binder,这次我们采用AIDL 3、SeekBar与音量关联同步 并修改时间 4、自定义TextView画歌词 并实现缓缓移动效果,并实现歌词与进度条同步 5、原创 2018-01-16 13:11:56 · 2061 阅读 · 1 评论 -
蓝牙通信,完整的通信流程!
无线通信方案,有三种方案可以实施: 1、NFC 2、蓝牙 3、WIFI 下面是对这三个知识点做的一个总结,参照对比可以选择合适的方案。而本章着重讲的蓝牙之间通信。 首先介绍一下蓝牙的两个广播Receiver。 第一个:蓝牙状态的改变是通过广播接收到的。 // 注册蓝牙状态接收广播 IntentFilter intentFilter = new nt原创 2017-12-28 16:30:34 · 52969 阅读 · 5 评论 -
IPC多进程之完整解析——多进程的定义、多进程的运行模式(1)
PS:近期可能要对IPC,进程间的通信做一个总结,有需要的同学,可以关注我,我会持续更新下去,把IPC解析透彻! 内容比较多,可能要几篇文章才能写完! 多进程的解析: 进程间的通信方式就是Binder了,通过Binder可以轻松的实现进程间的通信。除了Binder,Android还支持Socket,通过Socket也可以实现任意两个终端之间的通信,当然同一个设备上的两个进程,通过Socket原创 2017-08-31 12:04:57 · 299 阅读 · 0 评论 -
解析Handler异步消息处理!
Handler中异步消息处理一般由四个部分组成,Message、Handler、MessageQueue和Looper。1、Message :是在线程之间传递消息,它可以携带信息,用于不同线程之间交互数据。它里面字段有 waht、arg1、arg2(int类型)、object型数据。2、Handler: 它主要用于发送消息和处理消息,发送消息一般是使原创 2017-08-28 11:37:04 · 440 阅读 · 0 评论 -
Android事件分发完整版总结,终结版解析!
总体的流程分发 Acticity —–> ViewGroup ——->View 事件分发涉及的几个方法: 1、dispatchTouchEvent 2、onInterceptTouchEvent 3、onTouchEvent好多人都是写个dome,看看日志。努力的记住,可过不了多长时间就又忘掉了,今天我给大家准备了一个原创 2017-09-04 16:42:02 · 427 阅读 · 0 评论 -
Android 多线程下载文件原理霸气解析介绍 (1)
无论是多线程下载,还是断点续传等复杂的功能,都需要先了解原理,遇到的问题。下面上图介绍一下。逐个介绍一下。http相关字段 : 1、Transfer-Encoding:chunked: 这个字段很重要,从字面意义上讲这是客户端接收传输的编码方式。这种编码方式的意思是,我们前段在展示一个比较大的内容的时候,服务器不是一次性把数据传过来的(一次性比较耗时),而是一块一块的传过来,这时原创 2018-02-07 16:59:49 · 676 阅读 · 0 评论 -
Android 多线程下载文件原理霸气解析介绍 -----线程池管理和任务队列 (2)
多线程下载、上传文件肯定是依靠线程池管理的,这篇文章插曲介绍一下线程池。 /** * 创建线程池 * 参数1:核心线程数量 * 参数2:线程池最大数量 * 参数3:线程存活时间 * 参数4:设置时间类型 * 参数5:给每个线程取名称,参数5 可以不写 * 原理: */ private static fina原创 2018-02-08 15:22:44 · 865 阅读 · 0 评论 -
Android_逆向开发_Smali基础语法和介绍!
在开始逆向开发之前,先给大家介绍几个概念什么是smali语言? smali语言是是Dalvik的反汇编语言,是最终虚拟机识别的语言。也就是说无论App怎么混淆,怎么加密,smali语言都是不能改变的,我们可以改smali从而实现改源码的功能!下面给大家介绍一下Smali的基本语法:Smali JAVA V void...原创 2019-03-01 16:11:05 · 1003 阅读 · 0 评论 -
Android_高级进阶_Hook插件开发__在任何APP添加自己的功能
如何在一个陌生的APP中插入自己想要的插件功能!本章实现目标:教你如何在一个陌生APP中,插入自己想要实现的启动图。开始之前先介绍一下,我们的操作是在反编译之后的代码上进行操作的。更要清楚的是java文件在编译之后对应的语言是smali语言。如下:ok,进入我们的正题,如何以上工具不清楚的请看我另一篇文章介绍!第一步:首先我们通过工具Killer,反编译你要修改的App。第二步:在A...原创 2019-02-28 14:57:49 · 1424 阅读 · 2 评论 -
Android高级进阶__ANR的定位、检测和避免
ANR的产生原因: 只有当UI线程响应超时才会引起ANR,超时产生原因一般有两种。 1.当前的事件没有机会得到处理,例如UI线程正在响应另一个事件,当前事件由于某种原因堵塞了。 2.当前的事件正在处理,但是由于耗时太长没能及时完成。根据ANR产生的原因不同,超时时间也不同,从本质上讲,产生ANR的原因有三种,大致可以对应到Android中四大组件中的三个(Activity/View、Br...原创 2019-02-13 10:54:13 · 1273 阅读 · 1 评论 -
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 · 1698 阅读 · 1 评论 -
WebView之性能优化,优化加载速度,缓存机制详解,解压服务器!
首先先声明一下工作中遇到的问题,我们项目在晚上九点的时候,是一个高峰期。由于服务器高并发没有优化好,在短时间内要做一下解决方案。还有一个是优化加载webview的加载速度。这个放在后面说。场景,晚上九点,是用户活跃高峰期,导致原生App端,打开H5页面,需要请的CSS和JS这些文件特别的慢,所有H5页面会在App上显示布局错乱,显示有问题等情况!以下做出了几种方案。(当然后台解决高并发是核心关键第一原创 2018-04-10 15:54:44 · 2468 阅读 · 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 · 1927 阅读 · 1 评论 -
Android 多线程下载文件原理霸气解析介绍 (完结版)-----greendao数据库的存储,断点下载
这篇文章主要介绍一下,如果暂停了,或者网段了,然后有恢复了,接着之前的继续下载。首先我们先添加数据库 greendao步骤1:首先在项目中创建一个java的Modle。如图 步骤2:创建DbGenerate文件,public class DbGenerate { public static void main(String args[]) { // 版本号 \ 包名原创 2018-03-06 16:19:34 · 369 阅读 · 0 评论 -
RecyclerView 局部刷新Item卡顿,已解决
我们在做需求的时候,很大频率上用到局部刷新item: adapter.notifyItemChanged(position); 但是会觉得卡顿, 这个时候我们只需要在这个方法在加一个参数就解决了 adapterObtainCardLibrary.notifyItemChanged(position, 0);http://blog.csdn.net/lyankj/article/detai原创 2018-03-05 17:14:29 · 8040 阅读 · 1 评论 -
构建者模式,优化真实案例!!
拿我们上一篇的多线程下载案例,来用构建者模式优化一下。 直接上代码,代码是最好的解释:最终调用效果如: // 构建者模式初始化数据。 DownloadConfig builder = new DownloadConfig.Builder() .setCoreThreadSize(2) .setMaxThr原创 2018-03-08 16:39:56 · 249 阅读 · 0 评论