5 许佳佳233

尚未进行身份认证

我要认证

热爱生活,热爱编程,热爱互联网,热爱祖国。

等级
TA的排名 1k+

android Activity任务栈使用总结

前言android上对于任务栈的控制还是比较常见的,尤其是在小程序、小游戏的场景。笔者近期也有在实际项目中碰到,因此就好好学习了一下,作此文以记录。本文主要还是自己的一些使用总结,如有不对或者需要补充的地方,欢迎评论交流。此文需要有对android启动模式的基础,还不了解的读者推荐看下笔者前面的文章:完全理解android Activity启动模式LauchMode (深入Activity与任务栈)使用概念android上要使用多任务栈,除了要了解启动模式之外,就是需要了解taskAffi

2020-08-01 14:33:53

android handler postDelay源码解析

概述postDelay是在android中经常用来处理时延任务的操作。近期突然比较好奇postDelay实现时延的原理,于是学习后作此文。如果对handler原理还完全不了解的读者可以看下笔者的此篇文章:Handler源码解析postDelay的调用过程 public final boolean postDelayed(@NonNull Runnable r, long delayMillis) { return sendMessageDelayed(getPostMessag

2020-07-18 17:36:30

android 自定义View的几种方式

概述本文主要总结一下笔者实际项目中碰到的自定义View的几种方式,以及优劣。大概有以下几种方式:使用时绑定不使用xml,直接java实现一次定义,随处可用本文更多的还是个人使用经验的总结,如有错误或者需要补充的地方,欢迎评论交流。Demodemo中分别使用三种方式实现了类似的布局。除了作者将列出的优劣之外,读者可自行查看代码来进行比较。实现效果与项目文件如下:一、使用时绑定优势页面布局与View的业务逻辑解耦。页面布局使用xml实现,可以预览,在页面较复杂的情况下,可以

2020-07-18 10:23:42

webview 实际项目 使用总结

概述webview在客户端使用非常广泛。本文主要针对个人对webview的应用和学习对相关知识点做一个总结,如有整理的不对或者不同意见欢迎评论交流。目前市场上的app使用场景有以下:(只是举例,并不代表所有场景)广告页面活动页面与客户端app功能关系不大,但是两端都要有的页面。例如:客服页面,申诉页面,签到页面等。优劣使用webview主要有以下优势:不用跟客户端版本,开发灵活。随时可以发布新内容或者修改bug。双端统一,一份代码在android与ios两端都可以使用。业务上解耦

2020-07-11 16:23:00

android动画如何更新UI(ValueAnimator源码解析)

概述android动画经常会碰到卡顿,或者阻塞主进程之类的问题。为了排查此类问题,不得不对动画原理了解一二,于是作此文。此文围绕两个主线问题展开:ui更新的频率是如何控制的?比如,1秒内会更新多少次?每次更新UI的时候所带的update的value是如何控制的?比如,现在有个0到100的动画,在第三次执行update的时候,value是多少?对动画还是不太了解的读者可以看下笔者之前的文章:Android动画总结 (valueAnimator、objectAnimator、Animat

2020-06-20 19:40:09

android自定义动画插值器(Interpolator)

前言之前已经讲过动画相关的内容,没有接触过的读者可以看下笔者之前对android动画使用的整理。Android动画总结 (valueAnimator、objectAnimator、AnimatorSet、PropertyValuesHolder、Interpolator)插值器概念动画插值器可以用来控制动画的变化规律,比如变化速率是先快后慢,还是先慢后快,或者是更细节的其他。android系统已经提供了一些常用的插值器,基本已经能满足大部分需求,对此有兴趣的可以看下笔者前言中的文章,此处就不徒

2020-06-20 14:32:14

一篇文章理解 同步异步、阻塞非阻塞

前述同步异步,阻塞非阻塞是一些非常常见的概念,但是对于开发者来说往往是用到了很难说清楚。笔者专门整理了下这方面的概念,作此文以记之。这部分内容可能存在一些争议,如有不同意见欢迎评论交流。概念个人理解同步异步与阻塞非阻塞最好的区分是从描述对象上:同步异步:用于描述任务、事件或者行为。阻塞非阻塞:用于描述线程或者进程是否会被挂起。同步一个任务调起另一个任务的时候,会去等待其任务返回结果(或执行结束),然后再继续执行。如下两图都是同步操作:在Task A调用Task B后,Task

2020-06-06 18:35:51

【StudyDownload】断点续传Demo

StudyDownloadStudyDownload项目地址:https://github.com/Double2hao/StudyDownload此项目展示了断点续传功能的简单实现,主要实现了以下功能:支持下载中途暂定下载将下载进度存储到本地,重启app后会从上次下载的位置开始下载支持清除原有的数据 理论概述本项目为了让项目更加简单化,尽量避免使用其他非基础知识。下载与文件的异步操作使用AsyncTask来实现,本地存储使用SharedPreferences来实现。断点续传

2020-06-06 11:28:14

Android ActivityManagerService (AMS)总结

转载前言AMS在Android中算是比较重要的一个知识点,不管是binder的源码还是Serveice的源码,都是涉及到AMS的,因此理解“AMS是什么”对一个Android开发者来说还是很有必要的。笔者之前也有分析过相关的源码:bindService 源码解析(为什么是异步)已经有博主总结的比较好了,因此就不重开篇幅了。原文地址:https://github.com/xiangjiana/Android-MS/blob/master/android/ams.md概述ActivityMa

2020-05-23 14:30:18

HTTP缓存

原文地址:https://www.jianshu.com/p/b32d13655be7客户端缓存场景1、如果HTTP支持缓存,那么在缓存没有过期的情况下,会使用本地缓存。2、如果HTTP支持缓存,并且缓存已经过期,那么客户端不用使用本地缓存,会向服务器请求。HTTP header客户端是否对HTTP协议缓存,一般是根据HTTP协议的header来控制的。通用的主要有以下几个header。(并不是都会被使用到,具体要看服务器和客户端如何协商的)HTTP本身只是一个协议,是需要服务器与客户端一.

2020-05-23 11:31:34

OKHttp源码解析 (复用连接池)

原文地址:https://www.jianshu.com/p/6166d28983a2复用连接池相关的主要三个类RealConnectionConnectionPoolStreamAllocation对流的处理使用Okio,Okio是okhttp中用于处理io的模块,没接触过的读者可以参考这篇文章:https://www.jianshu.com/p/f5941bcf3a2dRealConnection 要点代表着链接socket的链路,如果拥有了一个RealConnection.

2020-05-16 17:09:23

Android 热修复原理(java类加载机制)

原文地址:https://www.jianshu.com/p/cb1f0702d59f热修原理(java类加载机制)DexClassLoader在加载一个类时会先从自身DexPathList对象中的Element数组中获取(Element[] dexElements)到对应的类,之后再加载。采用的是数组遍历的方式,不过注意,遍历出来的是一个个的dex文件。在for循环中,首先遍历出来的是dex文件,然后再是从dex文件中获取class,所以,我们只要让修复好的class打包成一个dex文件,放于E.

2020-05-16 16:08:07

Java与Android的类加载器

双亲委派模型在加载一个字节码文件时,会询问当前的classLoader是否已经加载过此字节码文件。如果加载过,则直接返回,不再重复加载。如果没有加载过,则会询问它的Parent是否已经加载过此字节码文件,同样的,如果已经加载过,就直接返回parent加载过的字节码文件,而如果整个继承线路上的classLoader都没有加载过,才由child类加载器(即,当前的子classLoader)执行类的加载工作。特点显然,如果一个类被classLoader继承线路上的任意一个加载过,那么在以后整个系统的生命周期

2020-05-16 15:46:21

解决方案:android onstop 延迟回调 10s的问题

概述近期碰到activity onstop延迟回调10s的问题。关于问题的具体复现和原因,有博主总结的很不错,此处给上原链接:深入分析Android中Activity的onStop和onDestroy()回调延时及延时10s的问题此文主要记录一下笔者目前认为的解决方案,以及各方案的优劣。1、避免过度频繁或耗时的主线程操作假设现在是ActivityOne跳转到ActivityTwo,那么...

2020-04-19 09:28:22

【StudyRouter】路由的自动注册

StudyRouter项目地址:https://github.com/Double2hao/StudyRouter此项目通过使用动态编译、注解解释器等技术,用最简单的方式实现了路由的自动注册。如对这方面知识有兴趣的朋友可以看看。实现通过注解解释器生成辅助类通过Transform出辅助类和要注入代码的位置。在相应的位置调用辅助类的相关代码,实现自动注册。涉及知识点列表笔者...

2020-04-19 08:18:27

ARouter init 源码解析(自动注册的实现)

概要使用ARouter,我们只需要在必要的地方加上注解,然后在application中init Arouter就可以直接通过代码进行路由跳转了。为什么我们可以不用写任何注册的代码,就直接跳转到相关路由呢?答案肯定是——ARouter帮我们做了。@Route(path = "/test/activity2")public class Test2Activity extends AppComp...

2020-04-05 12:16:18

动态编译 java ASM入门

概述ASM 是java字节码操作框架。由于ASM性能好的原因,所以在动态编译上往往比Javassist上使用的更加广泛。之前已经写过了Javassist实现动态编译的demo,对动态编译不了解的读者可以看下:动态编译入门(gradle Transform Demo)本文在前面demo的基础上,将Javassist的实现改为了ASM。因此对于gradle 插件等重复的点就不多加描述了,本文...

2020-04-05 10:36:50

完全理解 java操作数栈和局部变量表

概要近期学习到字节码操控框架ASM,其中对方法的定义需要设置最大操作数栈和局部变量表。于是,自己又复习了一遍java栈帧的概念。如果对栈帧概念还不了解的读者推荐看下此文章:详细解析Java虚拟机的栈帧结构例子综述本文将会通过诸多字节码的例子,来具体分析在不同情况下的方法的操作数栈和局部变量表。本文的分析主要基于javac和javap的使用:首先用javac生成java文件编译...

2020-04-05 09:30:43

动态编译入门(gradle Transform Demo)

概述现在市面上的插件化框架,热修复框架几乎都使用了动态编译技术。动态编译的实质是,使用gradle transform api,在项目构建过程的class文件转成dex文件之前,通过自定义插件,进行class字节码处理。本文主要是通过走一遍简单Demo实现流程,让读者能对动态编译有一个大概的了解。如对一些细节知识有更多需求的读者就需要自行学习了。简单Demo本文的Demo,通过动态...

2020-03-29 10:29:58

编译时注解 AbstractProcessor (Activity路由Demo)

概述前一篇文章已经整理过注解的一些概念,也是附上了运行时注解的Demo,如果对注解概念不是很熟的读者建议先看下前一篇文章:android 注解入门(Acitivity路由demo)此篇文章主要讲一下编译时注解的使用,同时也是以”Activity路由“的Demo为例子。本篇的Demo主要是演示了使用编译时注解来创建文件的功能。主要模块anotationrouter:创建注解pro...

2020-03-22 16:26:04

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。