Android问道--四大组件的工作过程-2-广播与内容提供者
广播的注册发送和接收过程
广播作为四大组件之一,使用频率没有Activity这么高,但是广播的工作过程也是有必要了解的,我们将从三个方面讲解广播,分别是注册,发送和接收
广播的注册过程
广播的注册就是广播接收者注册自己感兴趣的广播,广播的注册分为两种,分别是动态注册和静态注册
静态注册在应用安装的时候由PackageManagerService来完成注册过程
动态注册的过程是复杂的,时序图如下所示
sequenceDiagram
调用 ->> ContextWrapper : registerReceiver
activate ContextWrapper
ContextWrapper ->> ContextImpl : regist...
Android问道--四大组件的工作过程-1-Activity与Service
序言
在之前的两篇文章中介绍了系统启动的过程和应用程序进程的启动过程,应用程序进程启动后就该启动应用程序了,也就是启动根Activity
四大组件是应用开发中最常接触的,活动,服务,广播接收器,内容提供者,这篇文章会深入介绍它们的工作过程,四大组件的工作过程和插件化技术有所关联
根Activity的启动过程
Activity的启动过程分为两种,一种是根Activity的启动过程,一种是普通Activity的启动过程,根Activity指的是应用程序启动的第一个Activity,因此根Activity的启动过程可以理解为应用程序的启动过程,普通Activity指的是除了根Activity以外的Activity,根Activity和普通Activity启动是由重叠部分的,根Acti...
Android问道--应用程序进程的启动过程
应用程序进程简介
当我们想要启动一个应用程序的时候,首先要保证该应用程序所需的进程时候已经启动,AMS在启动应用程序的时候会检测这应用程序需要的进程是否存在,不存在的话就会请求Zygote进程启动所需的进程,在Android系统启动的文章中我们知道了Zygote的Java层会创建一个Service端的Socket,该Socket用来等待AMS请求Zygote创建新的应用程序进程,Zygote进程通过Fock自身来创建应用程序进程,这样应用程序进程就获得了Zygote进程在启动时创建的虚拟机实例,应用程序进程创建过程中还创建了Binder线程池和消息循环,这样进程中的程序就可以使用Binder进行进程间通信了
应用程序进程启动过程介绍
应用程序进程创建过程的步骤比较多,分为两个部分...
Android问道--系统启动的流程
Android系统启动流程
Android启动和Android的很多系统组件相关联,如应用启动流程,四大组件的原理,AMS,ClassLoager
Android系统中用户空间启动的第一个进程是init,进程号为1
init进程是Android系统启动的一个关键步骤,有很多重大职责,init是多个源文件共同组成的,文件位于源码system/core/init
Android启动流程前几步
启动电源和系统启动
当电源按下后引导芯片代码从ROM开始执行,加载BootLoader到RAM中
引导程序BootLoader
作用为拉起系统OS并运行
Linux内核启动
完成内核系设置(设置缓存,被保护...
MiniRetrofit---手动实现一个Retrofit
使用效果
定义API接口
interface AppService {
@GET("/artist/songs")
fun doNetWork(@Field("id") id: String): YepHttpCall
}
初始化并执行请求
val miniRetrofit = MiniRetrofit.Builder().baseUrl("http://192.168.1.108:3000").build()
val appService = miniRetrofit.create(AppService::class.java)
appService.doNetWork("6452").enqueue(object : Ca...
HCKV---手动实现一个MMKV框架
整体学习流程梳理
首先是学习如何创建一个可以供其他APP导入的库
梳理MMKV的源码,观测其实现的关键代码
学习mmap,将文件映射到内存上
学习NDK和C++以便使用高性能IO
学习protobuf编码
预期目标
实现最基本的Key-Value的存储模式
数据加密
数据校验
数据容错
线程同步,进程同步
结构设计
java层
全局初始化类
获取HCKV方法
数据存储方法
数据读取方法
Native层
全局初始化
HCKV全局缓存工具
内存映射文件
...
Service和MediaSession实现音乐播放器
前言
就Android的音乐播放器来说,大致有两种不同的实现方案
构建一个Service来进行音乐数据获取和音乐控制,需要自定义状态数值和回调接口,通过广播等方式完成Android和Service之间的沟通,让用户在Activity上的操作能在Service上做出响应,我是使用BindService后通过设置LiveData的Observe来完成的,这样的做法不但繁琐耦合度高,后期更改需求就像是砍到了大动脉
Google在Android5.0之后添加了MediaSession框架,用来解决媒体播放时界面和Service的通讯问题,使用这个框架可以减少一些复杂的代码,让代码的耦合度降低,提升代码的可读性
Service实现
package org.phcbest.net...
MVVM Demo解析
DEMO地址
phcbest/MVVM-Demo
项目依赖版本
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
...
共计 62 篇文章,8 页。