
Android
文章平均质量分 92
Android基础知识,源码分析等
腾腾儿娃
一个菜鸡安卓开发者的成长之路
展开
-
Android内存泄漏及OOM问题小结
文章目录内存泄漏概述静态变量导致的内存泄漏单例模式导致的内存泄漏匿名内部类或非静态内部类导致的内存泄漏1.匿名内部类2.非静态内部类资源对象使用后未关闭OOM问题导致OOM的原因避免OOM的一些方法参考资料内存泄漏概述在java中,内存泄漏是指某个对象在回收时,因为其他对象持有它的引用而造成这个对象无法被回收的问题。GC判断一个对象是否是可以被回收是通过引用计数法或可达性分析算法,而后者在java中更为常用。可达性分析算法简单来说就是判断这个对象是否被GC Root直接或间接引用,如果这个对象没有任原创 2020-09-11 19:04:17 · 507 阅读 · 0 评论 -
Retrofit源码分析(2.9.0最新版)
Retrofit源码分析文章目录Retrofit源码分析前言概述简单使用源码分析1.Retrofit的创建2.Call对象的创建2.1 默认情况2.2 kotlin挂起函数只需要响应体的情况2.3 kotlin挂起函数返回值想要完整的Response的情况参考资料前言本文基于retrofit 2.9.0,在2.6.0版本之后,retrofit对kotlin协程进行了支持,主要是加入了一些kotlin的扩展函数。概述Retrofit并不是一个网络请求库,它的作用主要是为了简化网络请求的构建和对返回数原创 2020-08-25 18:00:40 · 1098 阅读 · 0 评论 -
OkHttp——复用连接池源码小结(4.7.2 kotlin源码)
OkHttp复用连接池文章目录OkHttp复用连接池前言源码分析获取connection缓存缓存connection自动清理连接通知连接变得空闲清理所有的空闲连接小结参考资料前言本文基于OkHttp 4.7.2,如有谬误,请各位大佬指正。源码分析为了解决TCP三握四挥而造成的效率问题,在发送完HTTP请求并收到响应后保持TCP连接不断开,这就是HTTP的keepalive connections机制(HTTP1.1以后默认开启)。OkHttp的复用连接池就是为了复用这些没有断开连接的TCP连接的。原创 2020-08-13 23:16:48 · 421 阅读 · 0 评论 -
OkHttp网络请求流程小结
OkHttp网络请求流程小结文章目录OkHttp网络请求流程小结前言简单使用源码分析创建Call对象并加入线程池处理通过拦截器发送请求缓存策略HTTP的缓存OkHttp的缓存策略失败重连请求流程图参考资料前言本文基于OkHttp 4.7.2,下面的源码都是kotlin,我看了看OkHttp的github,发现最新4.8.0版本kotlin和java五五开,所以还不会kotlin的Android程序猿还不赶快学起来~简单使用OkHttpClient client = new OkHttpClient原创 2020-08-06 22:09:21 · 684 阅读 · 0 评论 -
EventBus源码分析小结
EventBus概述EventBus是一款针对Android优化的发布-订阅事件总线。它简化了应用程序内各组件间、组件与后台线程间的通信。其优点是开销小,代码更优雅,以及将发送者和接收者解耦。其中体现的设计模式有订阅者模式、建造者模式、单例模式等等。简单使用场景:MainActivity中有一个HomeFragment,在MainActivity启动时通过EventBus向HomeFragment发送初始化事件。定义事件class InitEvent(var activityClass: C原创 2020-07-16 00:15:17 · 210 阅读 · 0 评论 -
RecyclerView缓存机制小结
文章目录RecyclerView缓存机制小结前言概述缓存分析Recyclerlayout过程获取缓存过程进行缓存参考资料RecyclerView缓存机制小结前言本文主要通过学习参考资料中的两个大佬的两篇文章来总结RecyclerView缓存机制,如有谬误,还请各位大佬指正。概述RecyclerView对ListView有了一些优化,多了几种缓存,因此性能上有所提升,当然逻辑也更加复杂,但是再复杂它也就是一个 ”自定义“ View而已。缓存分析RecyclerRecyclerView的缓存主要原创 2020-07-14 19:16:01 · 626 阅读 · 0 评论 -
ListView缓存机制小结
文章目录ListView缓存机制小结前言概述layout过程第一次Layout第二次Layout滑动事件参考资料ListView缓存机制小结前言由于本人水平有限,如果文章中出现一些谬误,还请各位大佬指正。概述ListView的缓存通过父类AbsListView中的内部类RecycleBin实现,这个类中有两级缓存:ActiveViews 和ScrapViewsActiveViews用来缓存滑动后还留在屏幕内的itemview,供layout过程使用ScrapViews用来缓存滑出ListVi原创 2020-07-13 22:19:54 · 589 阅读 · 0 评论 -
Android屏幕刷新——源码分析
Android屏幕刷新原理——源码分析文章目录Android屏幕刷新原理——源码分析概述VSync信号三级缓冲源码分析消息队列的同步屏障参考资料概述Android系统每16ms(一般的安卓手机的FPS(每秒的帧数)是60)会请求一次VSync(垂直同步)信号,进行一次屏幕刷新。在请求到VSync信号后系统会向主线程发送一个异步消息,为了保证UI的流畅,系统使用了消息队列的同步屏障来优先处理这个屏幕重绘的异步消息。VSync信号VSync是Vertical Synchronization的缩写,译作原创 2020-07-11 17:45:18 · 2522 阅读 · 0 评论 -
自定义LoadingView——kotlin实现
前言自己动手实现了一个自定义加载视图,感觉效果还可以,这里分享一波,供大家学习和交流。如果有写得不好的地方,还请各位大佬指正。效果图废话不多说,先上效果图:分析这个自定义LoadingView由三个大小不断变化的小球构成,三个小球大小的不同步变化由ValueAnimation的startDelay方法实现。其中变化的最大半径、最小半径、小球间距、颜色等属性都可以进行自定义;在onMeasure方法中需要对高度为wrap_content时进行处理;在onDetachedFromWindow原创 2020-07-07 00:30:30 · 831 阅读 · 0 评论 -
Glide源码&缓存策略分析
Glide源码分析前言本文分析基于Glide 4.10.0,若有错误疏漏之处,请各位大佬指正。基本使用Glide.with(this).load(strUrl).into(imageView);with(Context context)方法Glide中的这些with的构造方法会绑定传入对象的生命周期,但是为什么要这么做呢?因为退出一个页面时,如果此时还在加载图片,就可能会发生内存泄漏,所以就需要Glide在退出页面时取消加载请求,防止内存泄漏。 @NonNull public s原创 2020-06-06 10:49:01 · 531 阅读 · 0 评论 -
轻量型的异步任务类AsyncTask的工作原理
AsyncTask原理前言本文所使用的源码应该比较新(可能是7.0以上,我的Android Studio中好像看不了源码版本),和书中代码稍有出入,但是不影响代码分析。一.概述AsyncTask是一个轻量型的异步任务类,它可以在线程池中执行后台任务,然后将执行进度和结果传递给主线程。先来看看AsyncTask的定义:public abstract class AsyncTask<...原创 2020-05-06 18:55:50 · 353 阅读 · 0 评论 -
Android消息机制——补充完善
文章目录Android消息机制一.概述二.ThreadLocal工作原理三.消息队列的工作原理四.Looper的工作原理Looper的prepare方法:下面康康loop方法:五.主线程的消息循环六.参考资料Android消息机制一.概述Android的消息机制主要指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程。Handler的主要作用就...原创 2020-04-21 21:38:24 · 536 阅读 · 0 评论 -
安卓activity的启动流程
文章目录前言一.概述二. 启动流程2.1 Activity.startActivity2.2 startActivityForResult2.3 execStartActivity2.4 AMP.startActivity2.5 AMN.onTransact2.6 AMS.startActivity2.7 ASS.startActivityMayWait2.7.1 ASS.resolveActiv...转载 2020-04-15 18:14:11 · 1026 阅读 · 0 评论 -
Retrofit的简单使用
文章目录Retrofit的简单使用前言一.简单使用接口说明1.添加依赖和权限2.创建实体类3.创建请求接口4.进行请求请求结果二.注解类型1.网络请求方法(1)@GET、@POST、@PUT、@DELETE、@HEAD(2)@HTTP2.标记(1) @FormUrlEncoded(2)@Multipart(3)@Streaming3.网络请求参数(1)@Header & @Headers(...原创 2020-03-08 09:58:29 · 2723 阅读 · 0 评论 -
2.24~3.1学习内容总结
本周学习内容1.了解了Android的Drawable2.学习了View动画,帧动画,了解了部分属性动画的内容3.利用动画的内容写了几个demo,完成了一个简单的自定义LoadingView本周分享内容demo的git地址第一个页面最上面是自定义LoadingView,下面的动图是一个帧动画(手动滑稽)。下面两个王者上官婉儿的技能图标使用了View动画,下面的图标监听了点击事件,点击后...原创 2020-03-01 20:08:45 · 203 阅读 · 0 评论 -
View的工作原理
View的工作原理1 初始ViewRoot和DecorViewViewRoot对应于ViewRootImpl类,是连接WindowManager和DecorView的纽带。View的绘制流程从ViewRootImpl中的performTraversals开始,其中先后调用的performMeasure,performLayout和performDraw三个方法来完成measure,layout...原创 2020-02-16 15:10:11 · 375 阅读 · 0 评论 -
安卓IPC及AIDL的使用
文章目录概述Android中的多进程模式IPC基础概念1.Serializable接口2.Parcelable接口3.Binder及AIDL的使用4.AIDL总结参考资料概述IPC即进程间通信,是两个进程间数据交换的过程。AIDL即安卓接口定义语言,它能简化我们实现进程间通信的过程。**进程和线程:**进程一般指一个执行单元,在PC和移动设备上指一个程序或一个应用;线程是CPU调度的最小单元...原创 2020-02-09 13:43:45 · 347 阅读 · 0 评论 -
Mvvm相关知识小结(DataBinding,ViewModel和LiveData的使用)
文章目录DataBinding库DataBinding的配置布局和绑定表达式双向数据绑定绑定数据事件处理ViewModel导入ViewModelViewModel的创建和使用LiveData概述LiveData的创建观察 LiveData 对象更新 LiveData 对象参考资料DataBinding库数据绑定库是一种支持库,借助该库,可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到...原创 2020-01-19 11:22:08 · 1619 阅读 · 0 评论 -
安卓开发艺术探索一——Activity的生命周期和启动模式
文章目录Activity的生命周期和启动模式Activity的生命周期正常情况下的生命周期异常情况下的生命周期1.系统配置改变导致活动被杀死并重新创建2.资源内存不足导致低优先级的Activity被杀死Activity的启动模式启动模式的设置IntentFilter的匹配规则1.action的匹配规则2.category的匹配规则3.data的匹配规则参考资料Activity的生命周期和启动模式...原创 2020-01-16 11:14:43 · 712 阅读 · 0 评论 -
安卓View的事件分发机制
文章目录一.概述1.事件的分发概述2.三个重要方法3.基本传递过程二.事件分发的源码分析1.Activity对事件的分发2.ViewGroup对事件的分发3.View对事件的分发一.概述1.事件的分发概述View对事件的分发即系统把MotionEvent事件传递给一个具体的View的过程。这其中涉及三个重要方法:dispatchTouchEvent,onInterceptTouchEven...原创 2019-12-03 22:27:59 · 325 阅读 · 0 评论 -
安卓自定义View的绘制顺序
一.继承View的绘制顺序继承View时,无论在super.onDraw(canvas)方法上面还是下面自定义绘制代码时,效果都是只会绘制你的自定义绘制代码。因为View中的onDraw方法是空实现。public class MyView extends View { ... protected void onDraw(Canvas canvas) { //在supe...原创 2019-11-24 11:58:24 · 216 阅读 · 0 评论 -
安卓BottomNavigationView修改默认点击后样式的selecter文件
在网上搜了好半天,才找到selecter文件该怎么写才能改变BottomNavigationView每个图标和下面的文字的默认样式(这里主要是改变颜色),为此写一篇博客加深印象并为遇到同样问题的同学们提供一个解决思路。在BottomNavigationView的属性中加入itemIconTint和itemTextColor属性;前者可以改变每个item被点击时的图标样式,后者可以改变图标下面的文...原创 2019-10-11 19:09:28 · 624 阅读 · 0 评论 -
安卓多人聊天室服务端
安卓多人聊天室服务端服务端没有图形界面,直接上代码package cn.ttw.netProgram.tcp;import java.io.*;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;public clas...原创 2019-08-12 11:05:21 · 345 阅读 · 0 评论 -
安卓多人聊天室客户端
安卓多人聊天室客户端主活动代码package com.example.chatroom_client;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;...原创 2019-08-12 11:02:11 · 570 阅读 · 1 评论 -
安卓计算器非法输入限制之——对输入小数点进行限制
安卓计算器之非法输入限制之——对输入小数点进行限制可以在监听按钮输入时进行如下判断: private static int oprPos = -1; //最近的符号索引 private static boolean checkPoint(String str){ //str为已经输入的运算式 boolean isLegal = false...原创 2019-07-27 10:54:00 · 1080 阅读 · 0 评论