- 博客(31)
- 资源 (2)
- 收藏
- 关注
原创 oom监测及LeakCanary原理
Dalvik:Linear Alloc:匿名共享内存Zygote Space:Alloc Space :每个进程 独占ART:Non Moving SpaceZygote SpaceAlloc SpaceImage Space :预加载的类信息Large Obj Space:大对象bitmapMAT主要用到了incoming references查找引用对象outgoing references查找被谁引用浅堆与深堆Sha...
2021-11-23 15:51:15 1426
原创 service、IntentService
startService()(n)生命周期执行的方法依次是:第二个括号代表执行几次onCreate()(1) ==> onStartCommand()(n);调用stopService()(n),onDestroy()(1)。调用bindService开启服务,生命周期执行的方法依次是:1、onBind返回值是null;onCreate() ==> onBind()(1);调用unbindService结束服务,生命周期执行onDestroy方法,并且unbindService方
2021-09-09 10:41:59 314
原创 glide
子线程 : Application作用域主线程 :非Application作用域 生成空白的Fragment图解如下:1、glide 单例2、FragmentManager 保存空白的fragment,通过tag获取。3、LifecycleListener 接口,onStart()/onStop/onDestroy4、Lifecycle方法有addListener(LifecycleListener listener)、removeListener(LifecycleLis...
2021-09-08 14:48:13 2667
原创 WorkManager
WorkManager对比AsyncTask, ThreadPool的优势:WorkManager里面的任务在应用退出之后还可以继续执行。AsyncTask, ThreadPool里面的任务在应用退出之后不会执行。WorkManager自动选用JobScheduler, 或是AlarmManager来实现后台任务。使用WorkManager的一些任务示例:上载日志、将过滤器应用于图像并保存图像、定期将本地数据与网络同步等。优点包括:支持异步一次性和定期任务 支持网络条件,存储空间和充电状态
2021-09-01 11:31:43 408
原创 databinding、room。。。
加载xml标签会解析生成2份app/intermediates/data_binding_layout_info_type_merge/out命名规则(原命名-layout.xml)主要通过包名位置、tag(对应第二个xml的位置)、expression(来确定绑定的位置)。及以后apt的生成。originalTag是你原来的设置的tagapp/intermediates/incremental/mergeDebugResources/stripped.dir/layo...
2021-08-27 13:02:09 241
原创 dagger2、hilt注入
模型使用时候的问题1、单例 必须的在全局定义2、component 不允许同时注册2个类。需要把2个合并到一个component中,代码如下第二个注入的类需要修改之前的注入方式下面是2个component合并类中的使用合并后不要单独用他们的注解@Singleton单例模式,自己定义注解实现单利如下3、编译很耗时4、多个相同注解用 @Named5、支持懒加载类lazy(单例)provider<A>6、注入都写到 di包下面(规范不强..
2021-08-23 11:01:43 200
原创 okhttp介绍
支持HTTP/2并允许对同一主机的所有请求共享一个套接字(http.1-2 webscoket) 通过连接池,减少了请求延迟 默认通过GZip压缩数据 响应缓存, 避免了重复请求的网络 请求失败自动重试主机的其他ip, 自动重定向运行流程分发器dispatcher: 内部维护队列与线程池, 完成请求调配;拦截器interceptors: 五大默认拦截器完成整个请求过程。call.enqueue() 后会执行RealCall 里面执行 enqueue()->里面会 new As.
2021-08-18 11:24:43 4600
翻译 Linux网络IO模型
前4个为同步,后面一个为异步阻塞I/OIO复用模型非阻塞IO模型(了解即可)非阻塞IO通过进程反复调用IO函数(多次系统调用, 并马上返回) ; 在数据拷贝的过程中, 进程是阻塞的信号驱动IO (了解即可)套接口进行信号驱动I/O,并安装一个信号处理函数, 进程继续运行并不阻塞。当数据准备好时, 进程会收到一个SIGIO信号, 可以在信号处理函数中调用I/O操作函数处理数据。异步IO模型(了解即可)当一个异步过程调用发出后, 调用者不能立刻得...
2021-08-17 09:58:31 105
翻译 0拷贝解释
0拷贝:不必要的数据拷贝、减少cup拷贝的、都可以成为广义性的0拷贝零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上下文切换而带来的开销数据拷贝传输模型普通传输零拷贝sendfile2次拷贝是在硬件支持的情况下,去掉cpu拷贝,在2边做了一个内存映射。slicepipe通过管道传输时间局部性 把变量一次性初始化空间局部性 一次性把代码都加入到高速缓存区...
2021-08-17 09:53:15 270
翻译 网络题目解答
概述下什么是DDOS攻击和SYN洪水攻击带宽攻击极大的冲剂量去攻击网络,使网络资源耗尽,合法用户无法访问,大量的攻击需要很多肉鸡才能做的到连通性攻击大量的连接请求去冲击服务器,使得可使用的资源被耗尽(SYN洪水攻击)哪些应用比较适合用UDP实现直播、多播udt 是udp的自己在应用层自己实现了可靠性的传输 一般使用的地方是:海量数据在高速宽带 多用于广域光纤tcp用于4g、5g 、无线wifi 比udt快HTTP和HTTPS的区别ssl、报文裸奔、报文加密 80、443 加密..
2021-08-16 11:56:49 90
原创 BIO、NIO、AIO
bio(blocking) 1个请求对应一个线程nio(多路复用) 多个请求对应一个线程nio(异步io ) 连接、读写异步操作
2021-08-16 11:31:02 96
原创 网络协议Tcp/Ip
图1图2图3自己的理解,仅供参考,不对希望指正:服务启动1、去注册域名绑定ip端口当一条数据通过https发送时候1、通过dns解析目标ip和端口2、传输层打包源目端口、网络层打包源目ip(图2、图3)3、打包以太网包(不懂)4、到接收端 解析以太网找到目的ip(mac上绑定ip),发送到对应的mac机器上,5、ip再次解析找到端口,发送到制定的应用上如果是大数据发送会在 网络层(ip)进行拆包,每次发送包的时候有超时重传(rto) 应答确认,来判断...
2021-08-12 11:42:58 135
翻译 sql讲解
.timer on 执行sql显示查询时间SQLite Glob 语法SQLite 的 **GLOB** 运算符是用来匹配通配符指定模式的文本值。如果搜索表达式与模式表达式匹配,GLOB 运算符将返回真(true),也就是 1。与 LIKE 运算符不同的是,GLOB 是大小写敏感的,对于下面的通配符,它遵循 UNIX 的语法。- 星号 (*)- 问号 (?)星号(*)代表零个、一个或多个数字或字符。问号(?)代表一个单一的数字或字符。这些符号可以被组合使用。| 语句...
2021-08-11 10:08:31 272
原创 crash检测方案
java crash 实现UncaughtExceptionHandler接口,然后注册ndk crash(BreakPad)利用liunx信号机制,Linux信号一方面用于正常的进程间通信和同步,另一方面它还负责监控系统异常及中断。当应用程序运行异常时,Linux内核将产生错误信号并通知当前进程。当前进程在接收到该错误信号后,可以有三种不同的处理方式。忽略该信号; 捕捉该信号并执行对应的信号处理函数(信号处理程序); 执行该信号的缺省操作(如终止进程);当Linux应用程序在执行时发生严
2021-08-10 10:44:54 496
原创 Apk瘦身
1、android size analyzer 插件2、移除未用资源 minifyEnabled/shrinkResources 使用keep.xml不被删除3、Analyse->Run in...->unuserd Rescurses4、设置文字资源android defaultConfig resConfigs "zh-rCN"5、abiFilters "armeabi-v7a"6、png转svg、tint 系统(new->Vector asset)7、使用微信AndRes
2021-08-09 14:07:43 94
原创 电量与网络优化
电量优化减少操作:您的应用是否存在可删减的多余操作?例如,是否可以缓存已下载的数据,而不是每次重新下载数据?推迟操作:应用是否需要立即执行某项操作?例如,是否可以等到设备充电后或者Wifi连接时(通常情况下使用移动网络要比WIFI更耗电 )再将数据备份到云端?合并操作:工作是否可以批处理,而不是多次将设备置于活动状态?比如和服务器请求不同的接口获取数据,部分接口是否可以合并为一个?Doze测试(打盹儿)暂停访问网络。系统忽略PowerManager.WakeLock唤醒锁定。标准 Alarm
2021-08-09 11:26:17 384
原创 ANR问题分析
ANR类型KeyDispatchTimeout(常见。Input的超时机制与其他的不同,对于input来说即便某次事件执行时间超过timeout时长,只要用户后续在没有再生成输入事件,则不会触发ANR)input事件在5S内没有处理完成发生了ANR。logcat日志关键字:Input event dispatching timed outBroadcastTimeout前台Broadcast:onReceiver在10S内没有处理完成发生ANR。后台Broadcast:onReceiver在
2021-08-08 16:48:46 754
原创 启动流程优化
冷启动: 冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动。 (第一次打开app)热启动: 在热启动中,系统的所有工作就是将 Activity 带到前台。只要应用的所有 Activity 仍驻留在内存中,应用就不必重复执行对象初始化、布局加载和绘制。 (按下home键)温启动: 温启动包含了在冷启动期间发生的部分操作;同时,它的开销要比热启动高。有许多潜在状态可视为温启动。例如: 用户在退出应用...
2021-08-05 10:30:31 180
转载 成员变量和局部变量的区别
成员变量: ①成员变量定义在类中,在整个类中都可以被访问。 ②成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。 ③成员变量有默认初始化值。 局部变量: ①局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。 ②局部变量存在于栈内...
2019-10-09 18:06:32 141
原创 内存优化管理
一、内存抖动短时间大量的对象创建及销毁,伴随着频繁的gc(比如字符串拼接,在class编译的后,能看到大量的StringBuilder被创建出来)。内存抖动会造成卡顿、oom现象。为什么?卡顿的原理:android回收机制默认使用的是cms机制,如果内存满了,gc开始工作,工作的时候,会把所有的线程都挂起包括主线程,同时采集你创建的无用对象,并收集,销毁。此时就会有卡顿现象。如果频...
2019-08-28 11:34:44 307
原创 android项目突然出现大面积乱码
打开项目乱码,本地文件没问题1.可复制另存重命名再打开项目2.删除.Androidstudio/system/caches下缓存文件再重新打开项目
2019-08-02 12:49:13 835
原创 Android内存、性能优化
1、Bitmap:压缩处理(有固定的尺寸),用完及时recycle,透明度属性尽量使用RGB_565,多次使用缓存处理2、Cursor(游标)回收3、Receiver(接收器)回收4、Stream/File(流/文件)回收1、使用系统自带的类库,不要自己写(TextUtils、String.indexOf())2、重用系统资源:ListView的item、图片、字符串、style、颜色...
2018-12-28 17:33:35 200
转载 wait、notify、sleep、yield、join详解
一、线程的状态 Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。 New:新建状态,当线程创建完成时为新建状态,即new Thread(...),还没有调用start方法时,线程处于新建状态。 Runnable:就绪状态,当调用线程的的start方法后,线程进入就绪状...
2018-07-17 21:25:58 523
原创 Runnable和Thread以及Callable的区别
Thread1、是一个类2、只能被继承实现方式class ThreadTest extends Thread{ private int ticket = 100; public void run(){ while(true){ if(ticket > 0){ ticket- }else{ break; }}}new T...
2018-07-16 22:19:52 5523
原创 线程池内部分析(二)-synchronnized、lock、volatile区别
上一篇说起volatile这个词在Java 5之前,它是一个备受争议的关键字。Java 5之后,volatile关键字才得以重获生机。了解volatile之前我们先说一下多线程并发,要想并发程序正确地执行,必须要保证原子性、可见性以及有序性。只要有一个没有被保证,就有可能会导致程序运行不正确。原子性从头到尾一次性执行完,比如银行转账大家都知道就不解释了。在Java中,对基本数据类型的变量的读取和赋...
2018-07-15 20:32:57 310
原创 activity启动过程文字讲解
第一步应用安装安装应用的时候,系统会启动一个PackaManagerService的管理服务,这个管理服务会对AndroidManifest.xml文件进行解析,从而得到应用程序中的相关信息,比如service,activity,Broadcast等等,然后获得相关组件的信息,保存到ShortcutInfo类中。第二步Launcher应用启动安装的应用我们都知道Launcher也是个应用,源代码工...
2018-07-15 18:01:48 173
转载 Java程序运行时,数据都保存到什么地方?
程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:寄存器这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。堆栈驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直...
2018-07-05 11:37:45 300
原创 线程池内部分析(一)-interrupt、interrupted、isInterrupted
说起关于线程池文章,网上已经很多了,再次我也不介绍那么详细了。介绍线程池之前我们先看一下他内部几个方法和参数interrupt、interrupted和isInterrupted的区别讲解之前希望先看一下这篇文章https://blog.csdn.net/github_34889651/article/details/52474869点击打开链接文章的最后我有个总结,我根据我意思稍微改一下1. i...
2018-07-04 10:51:57 1238
原创 Handle、Loop、Message、MessageQueue 源码解析
首先感谢在看的读者们,因为这是我第一次写博客,可能写的不太好,大神勿喷、大神勿喷、大神勿喷。好了废话不多少,下面进入我们的正题。下面请看源码。。。。。。===『眼镜都带上了,楼主让我看这个呀』哈哈,当然不是呀。我只是想说 所有学习的东西都是从 hellow world 开始吗。首先我们都知道每一个app的入口都是main方法开始运行,那说啥,咱们点击去看一下把main方法是放在final 修饰的A...
2018-05-08 15:03:41 651 2
原创 layout 下面的文件不更新了
折腾了一天 终于发现是多了一句 res.srcDirs = ['src/main/res', 'src/main/res/layout']删除 就ok 了。具体为啥,求大神回复!
2017-03-17 11:10:09 426
转载 nonatomic,assign,copy,retain的区别
nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。 (atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所 以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatom
2013-01-08 15:36:30 319
firebase-4.0.0.zip
2020-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人