自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NDK开发C++基础

const 是防止修改值,而&是性能的提高,如果没有&,执行对象+对象的时候,调用到positon operator + (const positon pos1){会构建新的副本,后传入的pos2和 (const positon pos1)里的pos1会是两个不同的对象,加上&则不会构建新的副本,不会构造新的副本,&是给pos2所指向的内存空间取一个新的别名,但是没有产生新的副本。真实开发中,静态函数,友元函数,普通函数,构造函数,析构函数,拷贝构造函数 区别。传入的两个子类,输出的都是父类的。

2023-03-16 14:14:07 664 1

原创 NDK开发—C语言基础

add()和del()函数进栈,有各自的内存地址,如add()内存地址为100H,del为200H,void (*method)(int,int)可以接受地址传递, opreate(add,10,20)时传入地址100H, method(num1, num2)找到对应的函数,并且传入值进行操作,指向回调。如int_num的地址为001H 而 &int_num=001H ,*为获取地址的值,如 * (&int_num)获取&int_num的值,即获取地址为001H的值,100。

2023-02-23 15:46:35 1029

原创 Handler源码分析

是线程上下文存储的变量,它是线程隔离的工具类,内部维持了一个Map,其中set的时候会将当前线程所对应的map,把当前线程所对应的threadlocal作为key。可见,enqueueMessage是将消息压入消息队列,而looper则取消息,然后调用dispatchMessage,调用的是handlerMessage,整个handler从发送到接收流程就是如此。msg取消息的时候,不是取的next而是取的when,直接取当前消息,就保证了先进先出。它的构造函数是私有的,是通过prepare初始化的。

2023-02-13 13:41:01 522

原创 LeakCancary泄漏分析

虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了。

2023-02-08 10:42:32 392

原创 安卓内存优化-bitmap优化

如果通过复用Bitmap来解码图片,如果被复用的Bitmap的内存比待分配内存的Bitmap大,那么getByteCount()表示新解码图片占用内存的大小(并非实际内存大小,实际大小是复用的那个Bitmap的大小),getAllocationByteCount()表示被复用Bitmap真实占用的内存大小(getByteCount永远小于等于getAllocationByteCount)这个值和透明度通道有关,默认值是true,如果设置为true,则返回的bitmap的颜色通道上会预先附加上透明度通道。

2023-02-07 15:10:20 769

原创 安卓性能优化之内存优化

系统给VM分配了一定的内存大小,app可以申请使用的内存大小不能超过此硬件逻辑限制,就算物理内存富余,如果应用超过VM最大内存,就会出现内存溢出crash。产生泄漏之后不会立马导致应用崩溃,1个地方存在泄漏,程序跑久了之后,内存泄漏会一直积攒着,达到OOM级别,会导致应用低内存,会导致发热,耗电更严重的导致内存溢出。在AS中的Profiler中使用查看波动图,内存抖动会频繁GC,如自定义view中的ondraw()中频繁创建销毁画笔路径等,最后会导致内存千疮百孔。即OOM,OOM时会导致程序异常。

2023-01-28 09:10:20 1591 3

原创 安卓性能优化一数据结构

k为object类型,根据k找到int类型的hashcode,装箱过程,table []大小未知,根据hashcode % table的length求模运算,得到范围0-length-1,求模运算等价于位运算,源码中使用的是位运算,更快,往JVM转为字节码时速度更快,这时得到下标index即源码中的i,通过下标i找到要操作的位置,完成k的任务。扩容耗性能,避免扩容,创建时应该评估hash表的大小,(大小/0.75+1),如何保证大小为2的次幂,这就和put时有关。避免冲突,长度更大,冲突的可能性更低。

2023-01-09 16:45:50 581

原创 Frida安装到使用一目了然

下载同版本的frida-service包到手机上,使用frida --verison查看frida版本,然后adb shell getprop ro.product.cpu.abi查看手机位数,然后去。安装过程可能会弹出让手动安装或者升级py安装插件,可以升级,然后更改镜像再C:\用户\admister\下新建pip文件夹。下载同版本符合位数的service压缩包 如frida-server-15.2.2-android-x86 ,不要下错。这里使用阿里云镜像,再次安装,等待即可。

2022-09-19 16:33:30 2959 2

原创 浅谈VirtualApp

Vapp.JavaattachBaseContext的时候进行startup()加载hook等invocationStubManager.init();对 Java 层 framework 的 Hook,将其定位到 VA 伪造 VA framework 上去Vapp.java在onCrete方法中加载了安装app的方法在onServerProcess()内的 virtualCore.setAppRequestListener(new MyAppRequestListener(VApp.this))

2022-09-08 11:25:17 1703

原创 Application启动流程

我用的是安卓10版本,其他版本可能有差异,但是具体实现原理是一致的Activity.javaAndroid 的桌面本身也是一个 APP,为 Launcher。当我们点击桌面的应用图标开始,就是 Launcher 中的一次点击事件:1135ItemClickHandler点击事件调用startAppShortcutOrInfoActivity267最后调用startActivitySafely1826这里调用的是父类的 startActivitySafely 方法Launcher extends Ba

2022-08-30 13:53:16 1544

原创 Java泛型小结

Java的泛型是JDK新引入的特性,为了向下兼容,虚拟机其实是不支持泛型,所以Java实现的是伪泛型机制,也就是说Java在编译期擦除了所有的泛型信息,这样Java就不需要产生新的类型到字节码,所有的泛型类型最终都是一种原始类型,在Java运行时根本不存在泛型信息。因为泛型类中的泛型参数的实例化是定义泛型类型对象,(比如ArrayList)的时候指定的,而静态成员是不需要使用对象来调用的,所有对象都没创建,确定不了这个泛型参数是什么。中的"B"成为实际类型参数。A中的"T"成为参数类型。...

2022-08-26 10:38:34 558

原创 Android Async异步下载实例

【代码】Android Async异步下载实例。带注解

2022-08-25 14:31:05 732

原创 apk打包基本流程

minsdk可以参考官方的版本分布,可以参考大厂的app,拖到as里看看manifest文件。minsdk过大,无法在低版本设备上安装。将一些敏感的组件不希望被外部启动的设为android:exported=“false”release包下不显示, Debug包下依旧有日志输出。加强 配置混淆文件proguard-rules.pro。取消线程匿名内部类对activity的引用。去掉Log.d这一行代码并且注释掉。若某个类因为混淆而找不到则添加。但是会增加apk闪退风险。使用L.d()输出日志。

2022-08-23 17:27:38 1366

原创 Android本地文件操作

观察目录是找不到的,因为将它映射成了sdcard和self目录 self版本不同文件名不同,但是内容是一致的。获取到SDCard/Android/data/包名/files/ 目录 长时间保存 如 应用里的清楚数据。获取到SDCard/Android/data/包名/cache/ 目录 临时文件 如应用里的清空缓存。位于 data/data/包名/shard_prefs 文件夹下。获取/data/data/包名/files。获取/data/data/包名/cache。操作内部存储是不需要权限的。

2022-08-19 14:23:33 1011 1

原创 Fragment使用总结

该视图中fragment又绑定了 android:name=“com.example.fragmentdemo.ListFrament”加载视图activity_static_load_fragment。直接指向fragment,fragment加载两个不同的视图。Fragment和Fragment之间传值,之间调用回调即可。中又加载了视图layout.fragment_list。只需要定义视图加载的类,就可以自定义Fragment了。设置Fragment被点击的时候,使用回调函数。...

2022-08-18 17:13:00 315

原创 深入理解Handler(上)

初始时,在Thread里面,threadLocals为空,当通过ThreadLocal变量调用get()方法或者set()方法,就会对Thread类中的threadLocals进行初始化,并且以当前ThreadLocal变量为键值,以ThreadLocal要保存的副本变量为value,存到threadLocals。如果mCallback不等于空,则直接返回,否则handleMessage(msg) 两个handleMessage(msg)是有差别的,一个是可以重写,一个是接口固定的方法。...

2022-08-18 14:09:59 416

原创 Handler打地鼠

代码】Handler打地鼠。

2022-08-17 14:04:45 116

原创 Handler入门

Handler可能会导致内存泄露,因为他需要传递上下文,因为是异步的,他的上下文可能会摧毁,但是GC不会回收掉,Handler中一直持有上下文引用,所以会导致内存泄漏。这里的handleMessage中Message需要重新构建,不能直接拿之前的msg否则会报错,再重新构建从消息池里拿消息,依旧是原来的消息。因为安卓开发中,除了主线程,其他线程不允许修改视图,所以需要Handler去做消息传递。添加权限后,最好把这个软件卸载一下再运行,如虚拟机里,长按这个项目卸载。对handler进行优化。...

2022-08-17 11:12:12 162

原创 BroadcastReceiver小结

按照接收者的优先级顺序接收广播,优先级在intent-filter中的priority中声明。-1000到1000之间,值越大,优先级越高。可以终止广播意图的继续传播,接收者可以篡改内容。如果需要发给多个类广播,就使用intent.setPackage(“com.example.broadcastsdemo”);发现有序广播可以实现BC2发消息给BC1,且可以中断广播。动态注册大于静态注册,但是他的作用域太低,容易死掉。所有监听该广播的广播接收者都可以监听到该广播。发现普通广播无法中断广播的发送。...

2022-08-16 14:31:45 278

原创 安卓学习笔记

带阴影的TextView跑马灯效果的TextView获取焦点方法1.添加点击获得焦点获取焦点方法2.重写TextView方法,默认一直获取焦点方法3.加载就获取焦点@drawable可绘制图片在drawable创建btn_selector.xml设置按压一个图片,释放一个图片selector选择器,可以为颜色,图片等当返回值为false时,才会执行其他事件,若为true时,执行完此事件,不再接着执行也可以自定义事件控件3.EditText通过按钮获取输入框内容控件4.Image

2022-08-16 11:15:18 371

原创 JavaScript快速入门

2.外部引入qj.js引入测试2.基本语法入门3.数据类型数值,文本,图形,音频,视频。。。变量numberjs不区分小数和整数,Number字符串‘abc’ “abc”‘\n’布尔值true , false逻辑运算&& 两个都为真结果为真|| 一个为真结果为真!取反比较运算符=赋值==等于(类型不一样,值一样,,会判断为true)===绝对等于(类型一样值一样,结果为true)注意:NaN===NaN,这个与所有的数值都不相等,包括自己,只能通过isNaN判断浮点数问题尽量避免使

2022-06-23 11:40:12 1071

原创 JUC深入浅出

什么是Jucjava.util.concurrent包下的方法1.线程,进程Java默认有几个线程,一个main,一个GC进程:打开一个软件。进行操作,就是子线程Java真的可以开启线程吗?开不了,Java调用的native方法,调用的底层c++,无法直接操作硬件并发,并行并发:多线程操作同一资源单核cpu并行:多个人一起走多个cpu获取cpu的核数public class Test1 { public static void main(String[] args)

2022-05-15 17:52:35 237

原创 Mybatis-Plus快速入门

Mybatis-Plus概况无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器

2022-05-11 19:37:33 226

原创 多线程快速入门

线程状态线程终止public class TestStop implements Runnable{ //设置标识符 private boolean flag =true; @Override public void run() { int i=0; while (flag){ System.out.println("run...Thread"+i++); } } //设置公开线程停止的方法 void sto

2022-05-10 20:00:29 169

原创 Springcloud快速入门

基础知识学习前提熟练使用SpringBoot 微服务快速开发框架了解过Dubbo + Zookeeper 分布式基础电脑配置内存不低于8GSpring Cloud 五大组件服务注册与发现——Netflix Eureka负载均衡:客户端负载均衡——Netflix Ribbon服务端负载均衡:——Feign(其也是依赖于Ribbon,只是将调用方式RestTemplete 更改成Service 接口)断路器——Netflix Hystrix服务网关——Netflix

2022-05-10 09:42:58 3542 1

原创 dubbo+zookeeper安装及快速入门

环境安装zookeeper下载地址:(https://zookeeper.apache.org/doc/r3.4.14/)1.运行apache-zookeeper-3.5.6-bin\bin\zkServer.cmd发现闪退,编辑zkServer.cmd文件末尾添加pause 。这样运行出错就不会退出,会提示错误信息,方便找到原因。发现缺少zoo.cfg2.将conf文件夹下面的zoo_sample.cfg复制一份改名为zoo.cfg即可。注意几个重要位置:dataDir=./ 临时

2022-05-02 16:53:01 1410

原创 Springboot任务调度

异步任务方法上添加@Async启动类添加@EnableAsync//开启异步任务service@Servicepublic class AsynService { //告诉spring这是一个异步的方法 @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.print

2022-05-01 16:52:16 281

原创 Swagger快速入门

环境集成导入依赖<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version></dependency><dependency> <groupId>io.springfox</gr

2022-04-29 17:00:10 380

原创 SpringSercurity和Shiro

1.SpringSecurity1.1环境搭建导入web和thymeleaf<!--thymeledf--><dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId></dependency><!--web--><dependency> <g

2022-04-28 21:25:53 317

原创 springboot整合数据库

1.Jdbc创建springboot时勾选jdbc和sql驱动支持,这里有个坑,如果使用.yml配置时,一定要检查properties中的配置,它会自动帮你生成配置信息。application.ymlspring: datasource: username: root password: "123456" url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&

2022-04-27 12:19:28 364

原创 spring自动装配bean

自动装配bean自动装配是spring满足bean依赖的方式测试传统装配:<bean id="cat" class="com.liu.pojo.Cat"/><bean id="dog" class="com.liu.pojo.Dog"/><bean id="people" class="com.liu.pojo.People"> <property name="name" value="无双"/> <property name

2022-04-24 10:19:40 851 1

原创 springboot自动装配原理

运行原理初探springboot的核心注解@SpringBootApplication进入内部@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan@ComponentScan这个注解在Spring中很重要 ,它对应XML配置中的元素。作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中@SpringBootConfiguration//进去@Documented@Conf

2022-04-22 17:17:51 589

原创 yaml语法和303检验

ymal语法创建application.yamlapplication.properties语法结构 :key=valueapplication.yml语法结构 :key:空格 value这种语言以数据作为中心,而不是以标记语言为重点!说明:语法要求严格!1、空格不能省略2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。3、属性和值的大小写都是十分敏感的基本语法:对空格要求很高#k: v空格不能丢#注入到我们的配置中#对象stude

2022-04-21 17:31:58 1085

原创 Vue快速入门

Vue1.基本语法v-if v-else-if v-else<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app"> <h1 v-if="Ok==='A'">A</h1>

2022-04-20 16:53:27 1155

原创 springmvc文件上传及下载

文件上传导入jar包<!--servlet-api--><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version></dependency><!--文件上传--><dependenc

2022-04-16 20:06:34 96

原创 springmvc拦截器实例

编写web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.or

2022-04-16 18:46:50 441

原创 jquery的ajax例子

Jquery实现Ajax登录验证页面<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>Title</title> <script src="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>

2022-04-16 10:36:07 393

原创 SpringMVC,json

SpringMVC,jsonjson的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。1.使用jackson导包<dependencies> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -

2022-04-15 15:42:12 720

原创 SpringMVC接收数据及乱码问题

接收请求参数及数据回显SpringMVC接收前端数据不再需要使用Request,可以直接获取@Controller@RequestMapping("/user")public class UserController { @GetMapping("/t1") public String test1(String name, Model model){ //1.接收前端参数 System.out.println("接收到前端的参数为:"+name);

2022-04-13 20:04:10 463

原创 RestFul风格

RestFul风格传统@RequestMapping("/add")public String test1(int a, int b, Model model){ int res=a+b; model.addAttribute("msg","res="+res); return "test";}地址栏传值http://localhost:8080/add?a=1&b=2添加路径变量@PathVariable使用RestFul风格@RequestMappin

2022-04-13 18:49:15 83

空空如也

空空如也

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

TA关注的人

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