前言

Activity一般是安卓开发接触到的第一个重要组件,代表着与用户交互的活动视窗,活动与活动之间往往不是相互独立的,startActivity()就是从一个活动跳转到另一个活动的桥梁。而对于startActivity()的了解,我们往往只停留在它的使用上,很少去深究它的原理

今天,就让我们跟随着源码,一步一步的追溯它的调用流程,初步了解下它的调用链,后续我们还可以继续挖掘,关于应用启动、启动模式、hook启动流程等相关技术支持。

此系列博客在未声明API版本情况下,将使用API30 版本的AndroidSDK源码。

源码查看工具使用AndroidStudio。源码来源%AndroidSDK%/sources。一般方式:备份一份source目录,使用AndroidStudio Open你想观察的api版本的源码目录。

2021年04月11日 framework
阅读更多...

内存

JAVA是在JVM所虚拟出的内存环境中运行的,JVM的内存可分为三个区:

堆(heap)、栈(stack)和方法区(method)。

栈(stack)

是简单的数据结构,但在计算机中使用广泛。栈最显著的特征是:LIFO(Last In, First Out, 后进先出),栈中只存放基本类型和对象的引用

堆(heap)

堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。JVM只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身。

方法区(method)

又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量

2021年04月04日 性能优化
阅读更多...
2021年03月10日 Jetpack
阅读更多...

ViewModel这个名称常常使人误解为MVVM中的ViewModel层,那么它是不是同一个东西呢?

ViewModel可以作为MVVM中的ViewModel层,但不是特指MVVM中的ViewModel层。

ViewModel 类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。

它是一个独立的组件,你可以把它视作生命周期相关的数据存储工具, 把它用在你觉得合适的任意地方,它可以是Fragment共享数据的桥梁、可以是屏幕方向切换时的数据来源、当然也可以是 MVVM 中 ViewModel层的 数据提供者,你可以使用LiveData让它变成可观察的数据,也可以使用DataBinding让他成为View的数据源

【本系列文章(JAVA/KOTLIN)演示案例均存储在github存储库ArchitecturalComponentExample中】

本篇所述源码及代码基于 API 30

2021年03月07日 Jetpack
阅读更多...

上一篇文章中我们讲了Jetpack之生命周期感知组件-Lifecycle使用篇,接下来我们来看一下他是如何工作的吧。

在了解其工作原理前,我们需要先简单了解以下ActivityThread对Activity生命周期的分发流程,以便理解Lifecycle的工作原理。

此篇前半部分将讲述API26及API30生命周期分发流程,后半部分依照前半部分对照讲述Lifecycle生命周期分发时机,最后将介绍Lifecycle源码执行流程及ProcessLifecycleOwner是如何实现应用前后台监听的。

2021年02月28日 Jetpack
阅读更多...

前言

什么是生命周期感知组件?

生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护。

Lifecycle是什么?

Lifecycle 是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态。

它所解决的痛点问题是什么?

在 Android 框架中定义的大多数应用组件都存在生命周期。生命周期由操作系统或进程中运行的框架代码管理。它们是 Android 工作原理的核心,应用必须遵循它们。如果不这样做,可能会引发内存泄漏甚至应用崩溃。

【本系列文章(JAVA/KOTLIN)演示案例均存储在github存储库ArchitecturalComponentExample中】

2021年02月25日 Jetpack
阅读更多...

前言

应用程序启动库StartUp提供了一种在应用程序启动时初始化组件的简单、高效的方法。库开发者和应用开发者都可以使用app Startup来简化启动序列,并显式设置初始化顺序。

不同于为每个需要初始化的组件定义单独的内容提供程序,App Startup允许你定义共享单个内容提供程序的组件初始化程序。这可以显著提高应用程序的启动时间。

此组件主要解决的痛点问题是:简化各个外部引用SDK初始化操作,并优化SDK初始化时机,在确保启动速度的情况下以更优更稳定的方式按需初始化SDK(当然,也可以利用它的按需按序执行的功能来初始化某些类)。

【本系列文章演示案例均存储在github存储库ArchitecturalComponentExample中】

2021年02月24日 Jetpack
阅读更多...

目录


ZERO

Q: 什么是WorkManager?为什么要使用它?

WorkManager 是一个 API,可供您轻松调度那些即使在退出应用或重启设备后仍应运行的可延期异步任务。WorkManager API 是一个适合用来替换先前的 Android 后台调度 API(包括 FirebaseJobDispatcher、GcmNetworkManager 和 JobScheduler)的组件,我们也建议您这样做。WorkManager 在其现代、一致的 API 中整合了其前身的功能,该 API 支持 API 级别 14,在开发时即考虑到了对电池续航的影响。

Q: 一定要使用WorkManager吗?

如果您的应用以 Android 10(API 级别 29)或更高版本为目标平台,那么您对 FirebaseJobDispatcher 和 GcmNetworkManager API 的调用在搭载 Android Marshmallow (6.0) 及更高版本的设备上将无法正常工作。

由上一问题可知,WorkManager是对 FirebaseJobDispatcher 和 GcmNetworkManager API 的替换,在一定情境下,显然更推荐您使用WorkManager。


本章主要内容为WorkManager基本使用及源码分析,涉及WorkManager入门使用、源码分析两个部分,可根据个人需要选择部分内容阅读。

本章所述WorkManager相关内容均基于WorkManager:2.4.0;

本章涉及代码内容均使用Java语言编写,Java版本1.8;

本章演示项目地址:https://github.com/TinloneX

参考官方文档请点击这里

2021年02月06日 Jetpack
阅读更多...

目录


源码篇

上一篇中我们简单使用了WorkManager的一般功能,基础使用还是比较简单的。“WorkManager 是一个 API,可供您轻松调度那些即使在退出应用或重启设备后仍应运行的可延期异步任务”。那么我们来了解一下他到底是怎么工作的吧。

2021年02月06日 Jetpack
阅读更多...

目录


源码篇

上一篇中我们了解了WorkManager使用的的主要组件,猜测了各个组件的作用,并简单介绍了WorkManager是如何初始化的。本篇将延续前文,介绍WorkManager中Service组件之一的SystemAlarmService。

SystemAlarmService

Service invoked by {@link android.app.AlarmManager} to run work tasks.

服务将被AlarmManager调用来执行工作任务.

2021年02月06日 Jetpack
阅读更多...