- 博客(22)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 安卓性能优化全面总结(友盟性能优化大赛获奖作品)
【安卓性能优化总结】【八年工作经验精华积累】目录最全的性能优化点总结:零、 启动优化1、项目背景2、 检测启动时间3、打印启动时间4、优化理念:5、启动时透明页优化:6、MultiDex优化7、多进程时,防止sdk多次初始化8、最终结果:一、 内存优化1、 项目背景2、性能优化的理念3、了解对象之间的引用关系和对象大小的占用4、了解Android中经常造成内存泄漏的点(1)、耗时任务:网络请求、属性动画、Timer(2)、handler(3)、匿名/非静态内部类(4
2021-10-27 17:31:07
9889
原创 Android Studio:你的主机中的软件中止了一个已建立的连接。
你的主机中的软件中止了一个已建立的连接再一次开发中碰到了这样的问题,同步 gradle 就会异常;解决方案有两个关闭wifi和回退 Gradle 版本;如果都不想这么干,还有一个解决办法:先打开你想操作的android 项目,之后再打开wifi,此时的android studio是可以正常使用的,如果wifi打开后再重新打开一个新项目,此时新项目的studio就会出现 你的主机中的软件中止了一个已建立的连接 这个问题了...
2021-08-09 18:15:03
1919
原创 tcp、http和socket的区别(看完这篇不懂,我姓倒着写)
tcp、http和socket的区别我非常怀疑科普文章的质量tcp和http是协议!socket是套接字,是接口HTTP和TCP详细协议介绍如何创建tcp/udp连接?最后总结:还有哪里不懂欢迎留言,我做解释我非常怀疑科普文章的质量tcp和http是协议!socket是套接字,是接口怎么样来理解?先说协议:协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流;其实协议就是一个约定,必须赤壁之战前夕,周瑜
2021-07-23 01:02:29
4719
6
原创 GitHub上最火的22个Android开源项目源码(最少的一个也超过10k star)
GitHub上最火的22个Android开源项目源码均超万星chat图表最全android工具类库 29.6k startAndroid智能下拉刷新框架-SmartRefreshLayout 20多种效果强大而灵活的RecyclerView AdapterSignal - 隐私通信工具图片显示控件,可手动缩放Telegram基于IJKPlayer(兼容系统MediaPlayer与EXOPlayer2),实现了多功能的视频播放器腾讯热修复方案tinkerNewPipe 可看油管视频圆形imageView各种
2021-07-14 23:44:56
12384
1
原创 MVP的弊端和解决办法
MVP的弊端和解决办法1、初识mvp模式新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入1、初识mvp模式全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方
2021-07-12 11:32:42
731
1
原创 常见的算法问题
常见的算法题java描述单链表的反转合并两个有序链表斐波那契数列问题给定一个数组arr,返回子数组的最大累加和给定一个数组arr、或者字符串,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。给出一个整数数组,请在数组中找出两个加起来等于目标值的数,单链表的反转递归方式:public Node preNode(Node head) { if(head == null || head.next == null) return head;
2021-05-03 15:37:48
257
原创 oaid冲突
问题就是这样:因为公司项目中接了很多sdk,而每家sdk用的oaid aar不同,主要是msa_mdid和oaid_sdk之间的冲突,也没什么好的解决办法,于是我只能把两个aar重新编译成了一个,统一通oaid_sdk的功能,保留mas_mdid的接口,做兼容完美解决问题废话不多说:资源地址,还没审核完,完了马上贴地址...
2021-03-10 16:07:14
1100
原创 java动态代理详解及实际应用
重点教你如何应用先回顾一下代理模式使用场景1:动态代理+反射 实现hook技术AOP(面向切面编程)先回顾一下代理模式代理模式分动态代理和静态代理,写起来也比较简单,先上代码:public interface Goal { void sayHello();//定义一个接口,声明好要做的事儿}然后实现他,真实的目的public class RealGoal implements Goal { @Override public void sayHello() {
2021-02-25 22:43:13
3627
11
原创 球形自由落体动画
package com.example.myapplication;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.os.Build;import android.os.CountDownTimer;impo
2021-02-09 17:37:29
336
原创 深度解析String s=new String(“abc“)创建了几个对象?
对象内存分配的几个问题解析String s=new String("abc")如何证明新创建的字符串是参数字符串的副本?拓展:运行时常量和编译时常量解析String s=new String(“abc”)我们知道想知道两个对象是不是同一个对象,直接用等号比较就可以 public static void main(String[] args) { String strABC = new String("abc"); String abc = "abc";
2021-02-09 14:04:38
787
1
原创 androidStudio出现Executing tasks: app:assembleDebug完美解决
androidStudio出现Executing tasks: app:assembleDebug开发的时候不知道为啥突然就出现这个问题了,而且是半路出现的;试了几个方法都不好用,最后打开任务管理器发现里面有好多studio的任务,还有openJdk的任务,导致电脑内存不足,把Android studio的相关任务全部干掉,重启后,原来报错的项目也可以正常运行了...
2021-02-08 16:10:01
8895
1
原创 彻底理解ArrayList和LinkedList的区别
此篇就够了区别的根本专业解释+白话解说区别的根本ArrayList和LinkedList的区别,简单说ArrayList使用get的速度快,LinkedList删除和插入快,get/set慢;再ArrayList不扩容的情况下只是通过add方法添加对象,那么他俩的速度是一样的;说白了不过是数组和链表之间的区别可以说List接口的实现方式有用数组结构实现的就是ArrayList,有用链表结构实现的就是LinkedList;反过来也可以说ArrayList对数组进行封装了一层,并且满足List接口,Li
2021-01-18 23:47:30
325
原创 HashMap原理源码加面试
HashMap原理几个要点分析源码构造函数:HashMap的内部结构:下标的计算和存储如何根据key找到value红黑树和链表的转换几个要点结构:数组+链表hashing(哈希法)的概念:散列法(Hashing)是一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法。HashMap的key下标计算方式:先前后16为扩容机制:每次扩容数组长度翻倍,扩容因数:默认数组长度的四分之三,可自定义;数组的长度也可自己定义1.8之后变化:链表会和红黑树相互转化;
2020-12-30 21:21:38
166
原创 Android事件分发机制
事件分发机制详解结构图如何应用滑动冲突的处理结构图怎么去记忆?1、dispatch和onToucheEvent,只要返回true就是消费,不继续往下传递;2、所有事件,只要是返回super都是正常传递(上图绿色部分);3、dispatchTouchEvent:分发事件,只要是返回false,就表示不向下分发,将事件送回上一层View的onTouchEvent;但是要注意actvity,因为actvity没有上层View了,所以在activity中返回false直接消费掉4、onIntercep
2020-12-30 16:53:51
123
原创 JVM之方法区
JVM之方法区方法区内容分类三级目录方法区先说特点1、方法区(Method Area)与 Java 堆一样,是所有线程共享的内存区域。2、Java 虚拟机规范把方法区描述为堆的一个逻辑部分,但是它却有一个别名叫做 Non-Heap(非堆),目的应该是与 Java 堆区分开来。其实也好理解,就是一些class类型的对象;比如Object.class,这也是个对象;只是个对象不是要用的对象,是模具对象,用来制造真正需要的对象的对象;就比如制作月饼需要模子,月饼是对象,模子也是对象;这是模子不是存放在仓库
2020-12-29 22:33:59
128
原创 仿网易云菜单
仿网易云个人中心滑动菜单上图上代码个人项目地址上图上代码import android.animation.ValueAnimator;import android.content.Context;import android.content.res.Resources;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graph
2020-12-29 09:39:06
209
原创 7年Android应该会为什么?
本篇是Android知识的汇总虚拟机相关深入浅出教你理解jvm虚拟机结构篇Android源码相关activity相关View相关安全性相关性能优化多线程数据结构集合相关maplistset架构方面教你设计模式的理论应用和实践场景协议相关第三方框架原理常见算法面试题总结虚拟机相关深入浅出教你理解jvm虚拟机结构篇jvm的堆内存Android源码相关Handler原理和源码binder原理跨进程通信activity相关启动流程启动模式View相关自定义View练习事件分发机制动画V
2020-12-28 22:49:00
466
6
原创 Android四种启动模式
四种启动模式先说显式跳转和隐式跳转四个跳转模式Flags先说显式跳转和隐式跳转我们在开发Android应用的时候,一般MainAcitvity会设置<action android:name=“android.intent.action.MAIN” />然后我们的系统就能找到我们app的启动页面了;这就是一个隐式跳转,系统会根据action标签去在我们的清单文件manifest 中筛选出来我们设置的action.Main的activity作为第一个启动的activity;包括系统里的打开相机、
2020-12-28 22:46:39
440
原创 Handler原理和源码
handler原理,超级详细主要对象和它们的大致作用message跨线程旅游路线图主要对象和它们的大致作用Handler 发送和接受message的对象Message 消息的实体对象Looper 一直循环取消息,然后发送给handlerMessageQueue 消息队列ThreadLocal 存储对象的类,特点是根据线程ID去管理对象,保证一个线程中只存在一个对象message跨线程旅游路线图其实很简单,就是利用堆内存,线程共享的机制;主线程会创建一个Looper,有且只有一个,loo
2020-12-26 22:11:44
325
原创 jvm的堆内存
jvm的堆内存堆空间的内存划分对象的分配过程逃逸分析GCMinor GC/Young GC触发Full GCStop-The-World堆空间的内存划分这部分过多描述,直接上图比例划分图上很明确了,一目了然;新生代(年轻代):Eden区、from、to区;比例是8:1:1;新生代顾名思义就是存放新产生的对象的地方;老年代占用三分之二的内存空间;打印对象空间分配的工具类 implementation ‘org.openjdk.jol:jol-core:0.14’分代年龄: 一个对象的内存划
2020-12-26 15:05:21
852
4
原创 jvm:深入浅出教你理解虚拟机结构
前言结构图怎么去理解?大部分技术文章感觉过于晦涩难懂,我写文章的目的和初衷是教大家如何去理解和运用这些基础知识,只有理解了才记得住,只有理解了才会运用。结构图首先是jvm结构图,这个老生常谈,不需要多做解释。上图怎么去理解?首先我们想象一个这样的场景,有一块刚从政府手里买的空地,可以在空地上建房子,但是房子比较特殊,要建的房子结构都是一样的;这个结构都一样的房子内部又可以划分成5个房间,然后里面有个人**(此人就是线程)开始干活,重点在于这个人如何装修这个房子,这个人还分灵魂和肉体**。第一个房
2020-12-21 23:27:17
272
和java unsafe同级别的原子操作类,是哪个叫什么来着?不是atomic
2021-03-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人