自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Activity在不同场景以及四种启动模式下的生命周期变化

最近面试问到了一些生命周期的问题。之前在项目里也会遇到对生命周期认识不全,而导致的bug。找了个时间写了个demo验证了一下,因此这里对几种情况做一下总结。

2022-09-23 12:11:44 1029 1

原创 读书简记6-《Android开发艺术探索》第十三至十五章

宿主和插件的概念:宿主是指普通的apk,而插件一般是指经过处理的dex或者apk,在主流的插件化框架中多采用经过特殊处理的apk来作为插件,处理方式往往和编译以及打包环节有关,另外很多插件化框架都需要用到代理Activity的概念,插件Activity的启动大多数是借助一个代理Activity来实现的。动态加载技术(也叫插件化技术)在技术驱动型的公司中扮演着相当重要的角色,当项目越来越庞大的时候,需要通过插件化来减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。...

2022-08-16 15:50:04 156

原创 读书简记5-《Android开发艺术探索》第十至第十二章

1.消息机制简述Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue和Looper的支撑。MessageQueue的中文翻译是消息队列,顾名思义,它的内部存储了一组消息,以队列的形式对外提供插入和删除的工作。虽然叫消息队列,但是它的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表。Looper的中文翻译为循环,在这里可以理解为消息循环。...

2022-08-16 15:48:06 754

原创 读书简记4-《Android开发艺术探索》第八、第九章

Toast的显示和影响过程实际上是通过Toast中的TN这个类来实现的,它有两个方法show和hide,分别对应Toast的显示和隐藏。由于这两个方法是被NMS以跨进程的方式调用的,因此它们运行在Binder线程池中。为了将执行环境切换到Toast请求所在的线程,在它们的内部使用了Handler。mShow和mHide是两个Runnable,它们内部分别调用了handleShow和handleHide方法。由此可见,handleShow和handleHide才是真正完成显示和隐藏Toast的地方。...

2022-08-16 15:46:08 696

原创 读书简记3-《Android开发艺术探索》第六、第七章

1.drawable概念Drawable有很多种,它们都表示一种图像的概念,但是它们又不全是图片,通过颜色也可以构造出各式各样的图像的效果。在实际开发中,Drawable常被用来作为View的背景使用。Drawable一般都是通过XML来定义的,当然我们也可以通过代码来创建具体的Drawable对象。在Android的设计中,Drawable是一个抽象类,它是所有Drawable对象的基类,每个具体的Drawable都是它的子类,比如ShapeDrawable、BitmapDrawabl。...

2022-08-14 11:06:15 172

原创 读书简记2-《Android开发艺术探索》 第三、四、五章

1.自定义View的种类继承View重写onDraw方法这种方法主要用于实现一些不规则的效果,即这种效果不方便通过布局的组合方式来达到,往往需要静态或者动态地显示一些不规则的图形。很显然这需要通过绘制的方式来实现,即重写onDraw方法。采用这种方式需要自己支持wrap_content,并且padding也需要自己处理。继承ViewGroup派生特殊的Layout继承特定的View(比如TextView)继承特定的ViewGroup(比如LinearLayout)2.自定义View的相关知识。...

2022-08-10 10:26:12 223

原创 读书简记1-《Android开发艺术探索》第一及第二章

1.什么是IPC?IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。任何一个操作系统都需要有相应的IPC机制,Windows上可以通过剪贴板、管道和邮槽等来进行进程间通信;Linux上可以通过命名管道、共享内容、信号量等来进行进程间通信在Android中最有特色的进程间通信方式就是Binder了,通过Binder可以轻松地实现进程间通信。...

2022-08-05 14:25:45 687

原创 关于最常用的Git命令和操作的记录

git是一个版本控制工具,是我们在日常开发中常常会使用到的工具。一些和git相关的基础知识在这里就不再赘述了。这里主要介绍一些基础的命令,掌握这些基本命令后,基本就可以解决绝大部分开发场景下遇到的问题。git的分支本质上是个指向commit对象的指针,和每个commit对象都有唯一的版本号。那么我们要对代码分支的操作,其实就可以想象成对一个链表的操作,无非就是对链表中的结点进行增删改查操作,或者把这个链表的结点加入到另一个链表中。因此理论上,只要掌握了一些基本的操作命令,经过这些命令的排列组合,就能很好的解

2022-07-14 16:53:12 85

原创 关于Android语言本地化适配的问题和记录

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android=“http://schemas.android.com/apk/res/android”xmlns:app=“http://schemas.android.com/apk/res-auto”xmlns:tools=“http://schemas.android.com/tools”

2022-03-01 22:52:53 2586

原创 Android基础(1) -SQLite

SQL-LiteSQLiteOpenHelper: 帮助我们创建数据库和管理数据库版本的抽象类。此外,根据官方文档的描述“此类使 android.content.ContentProvider 实现可以轻松地将数据库的打开和升级推迟到第一次使用,以避免因长时间运行的数据库升级而阻塞应用程序启动。”SQLiteDatabase: 可以认为是我们要操作的数据库的实体类,增删改查均需要通过此类的实例来调用相关的参数来完成。。Cursor:官方注释:此接口提供对数据库查询返回的结果集的随机读写访问,简单

2022-02-24 23:29:48 1944

原创 okhttp3-源码解析(5) CacheInterceptor

okhttp提供了让我们实现缓存的方法和接口,这部分的处理是发生在CaCheInterceptor拦截器中的。这个缓存其实就是把服务器穿回来的响应存储在本地(可以是内存也可以在磁盘),当我们再次准备向服务器发送请求时,就可以直接获取缓存中的响应,而不必再次向服务器发出网络请求。但是缓存的资源可能是会过期的,所以需要相应的机制能够验证缓存的正确性。在分析CaCheInterceptor之前,先总结一下Http中缓存的相关实现。Http缓存...

2021-12-23 22:05:55 1624

原创 Android消息机制(Handler机制) - 线程的等待和唤醒

我们都知道,Android的Handler机制,会在线程中开启消息循环,不断的从消息队列中取出消息,这个机制保证了主线程能够及时的接收和处理消息。通常在消息队列中(MessageQueue)中没有消息的时候,会调用MessageQueue的native方法,让主线程wait,以避免主线程在for循环中,什么也没干,白白的浪费CPU资源。这方面的内容就不再详细描述了,感兴趣的可以看这篇博客,写的非常清晰明了。这篇文章主要还是想聊聊,主线程等待和唤醒的时机的问题。1.异步消息和同步消息当Message

2021-12-16 01:15:35 3524

原创 okhttp3-源码分析(4) BridgeInterceptor

BridgeInterceptor是位于重定向拦截器之后的第一个拦截器,也就是说在okhttp默认实现的5个拦截器中的第一个。他的作用,顾名思义就是用户程序层面和网络层面的桥梁。他会根据用户请求来构建真正要用到的网络请求,又会根据服务器返回的网络请求,来构建用户层面的请求。从源代码分析,以小一点的视角看,他其实主要就是对请求报文的首部行做一些的设置,对响应报文可能出现需要解压文件的情况,进行解压。另一方面,okhttp中对cookie的相关设置也在这个拦截器中完成,okhttp是默认不使用cookie

2021-12-13 10:34:38 2254

原创 okhttp3-源码分析(3) RetryAndFollowUpInterceptor

如果没有添加自定义拦截器的话,RetryAndFollowUpInterceptor是okhttp拦截器链中的第一个拦截器。大体总结一下他的职责:发送请求前:1.为请求流程创建StreamAllocation(与连接工作有关)2.提供了cancel()方法来关闭连接发送请求后:1.在接收到response后,负责请求请求的重定向和重试工作相关处理逻辑:状态码问题原因okhttp处理逻辑408请求超时只在返回的超时时间为0时(希望立即重试),重试一次401,40

2021-12-12 22:49:13 1514

原创 okhttp3-源码分析(2) 拦截器链的实现

拦截器链(Interceptor)应该是okhttp框架的核心之一。责任链模式okhttp的请求拦截器的实现是一种典型的责任链模式,在okhttp中有一个Interceptor接口,默认的拦截器和我们自定义的拦截器都要实现这个接口。Interceptor接口内部还有一个内部接口Chain。在okhttp中一般使用的是他的具体实现类RealInterceptorChain下面Interceptor接口的部分代码:public interface Interceptor { //chain里面包含re

2021-12-11 15:02:54 803

原创 okttp3-源码分析(1)execute()方法和enqueue()方法

最近在看okhttp源码,我们都知道okhttp是用来进行网络请求,下面就从最常用的execute()方法和enqueue()方法切入,来分析okhttp的请求过程。先来看okhttp的基本用法,之后的分析应该都会以基本用法来进行:String url = "http://wwww.baidu.com";//这里是URLOkHttpClient okHttpClient = new OkHttpClient();//先构建okhttp客户端final Request request = new Re

2021-12-08 17:43:32 2216

原创 安卓实战项目 Sunny天气App

##tianqi

2021-07-19 14:52:23 1445 10

原创 关于Git的问题解决:Failed to connect to github.com port 443:connection timed out

问题说明最近在使用git的使用遇到了此问题,在想要clone和push的时候都会报错。在查看文章后,发现是代理设置出了问题,对这个问题的解决作一个总结。解决方案一:关闭代理在电脑设置中找到“Internet属性”,选择“连接选项”,点击”局域网设置“,勾选自动监测设置解决方案二:设置代理上面那个方案确实可以解决问题,但有时,我们使用代理的目的就是希望可以提高git的访问速度,关闭代理好像有点和我们的本意相违背。因此,我们可以重新设置代理,将我们的代理端口号,设置上去。与方案一中的操作..

2021-05-17 18:17:26 12442 8

空空如也

空空如也

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

TA关注的人

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