Android

关注公众号 jb51net

关闭
首页 > 软件编程 > Android > android 协程、线程和进程

Android 协程、线程和进程对比分析

作者:倾云鹤

文章主要介绍了Android开发中进程、线程和协程的基本概念及其在Android系统中的表现形式,强调了它们在多任务操作系统中的作用和特点,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧

在 Android 开发中,理解进程和线程的概念非常重要。进程和线程不仅是操作系统的基本概念,其在 Android 系统中的表现形式与四大组件也有密切关联。本文将通过梳理进程和线程的基本概念及其在 Android 中的特点,为开发者提供清晰的理解。

进程和线程的基本概念

1. 进程

2. 线程

特性进程线程协程
本质资源分配的基本单位,应用沙盒的基础操作系统调度的基本单位用户态的轻量级任务
隔离性,独立内存空间,崩溃互不影响,共享进程内存,一个线程崩溃可能导致整个进程崩溃,运行在线程之上,共享线程上下文
资源开销高(独立内存空间,创建/切换成本大)中等(拥有独立栈,共享堆)极低(用户态调度,可轻松创建数万个)
通信方式IPC(如 Binder、AIDL),复杂昂贵共享内存(需同步机制)或 Handler/Looper挂起函数ChannelFlow,类似顺序函数调用
阻塞性阻塞自身进程阻塞底层线程(主线程阻塞导致ANR)非阻塞挂起,释放底层线程做其他工作

协程的优缺点

协程是 Google 推荐的 Android 异步编程解决方案,它的核心优势在于用看似同步的方式写异步代码,极大简化了逻辑。

核心优势

需要注意的局限性

如何选择

使用示例

// 等待型调度器
private var sendCoroutineScope: CoroutineScope? = CoroutineScope(Dispatchers.IO)
sendCoroutineScope?.launch {
	// 网络请求、数据库操作、文件读写等任务
}
// 计算型调度器
private var calculateCoroutineScope: CoroutineScope? = CoroutineScope(Dispatchers.Default)
calculateCoroutineScope?.launch {
	// 网络请求、数据库操作、文件读写等任务
}
// 绑定对象为LifecycleOwner(如 Activity, Fragment),绑定的 Activity或 Fragment被销毁(onDestroy())时将取消该协程
lifecycleScope.launch {
	// UI层操作:界面更新、动画、与UI生命周期紧密相关的任务
}
// 绑定对象为ViewModel,ViewModel的 onCleared()方法被调用时将取消该协程
viewModelScope.launch {
	// 数据层操作:网络请求、数据库读写、耗时计算
}

到此这篇关于Android 协程、线程和进程对比的文章就介绍到这了,更多相关android 协程、线程和进程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文