50人参与 • 2026-02-02 • Android
在 android 开发中,理解进程和线程的概念非常重要。进程和线程不仅是操作系统的基本概念,其在 android 系统中的表现形式与四大组件也有密切关联。本文将通过梳理进程和线程的基本概念及其在 android 中的特点,为开发者提供清晰的理解。
进程和线程的基本概念
1. 进程
2. 线程
| 特性 | 进程 | 线程 | 协程 |
|---|---|---|---|
| 本质 | 资源分配的基本单位,应用沙盒的基础 | 操作系统调度的基本单位 | 用户态的轻量级任务 |
| 隔离性 | 强,独立内存空间,崩溃互不影响 | 弱,共享进程内存,一个线程崩溃可能导致整个进程崩溃 | 无,运行在线程之上,共享线程上下文 |
| 资源开销 | 高(独立内存空间,创建/切换成本大) | 中等(拥有独立栈,共享堆) | 极低(用户态调度,可轻松创建数万个) |
| 通信方式 | ipc(如 binder、aidl),复杂昂贵 | 共享内存(需同步机制)或 handler/looper | 挂起函数、channel、flow,类似顺序函数调用 |
| 阻塞性 | 阻塞自身进程 | 阻塞底层线程(主线程阻塞导致anr) | 非阻塞挂起,释放底层线程做其他工作 |
协程是 google 推荐的 android 异步编程解决方案,它的核心优势在于用看似同步的方式写异步代码,极大简化了逻辑。
coroutinescope(如 viewmodelscope)管理生命周期,当作用域被取消时,其内部所有协程都会被自动取消,有效防止内存泄漏。withcontext(dispatchers.io)、dispatchers.default等在不同线程间流转,并在结束时自动切回原线程。dispatchers.default),尤其是在主线程上执行,同样会阻塞ui导致anr。try-catch或 coroutineexceptionhandler妥善处理。lifecyclescope或 viewmodelscope。// 等待型调度器
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 协程、线程和进程内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论