安卓主进程等待多个子进程做完任务有什么优雅的设计模式吗?

2020-11-19 17:36:58 +08:00
 kerb15

一个 App 中运行了 4 个进程,包括主进程和 ABC 三个子进程。

主进程通知 ABC 同时去做一件写文件的任务,当 ABC 都做完时再回来告诉主进程,主进程对生成的文件进行压缩。

现在想到的笨方法无非就是一个变量去记录 ABC 是否已经完成,比如 000 表示都没完成,111 表示都完成了。

有没有老哥做过类似的案例,有什么奇思妙想吗?

10484 次点击
所在节点    Android
31 条回复
luckyrayyy
2020-11-19 17:40:10 +08:00
这...操作系统和 api 层面都有现成的,你搞些奇技淫巧干啥
kerb15
2020-11-19 17:43:31 +08:00
@luckyrayyy 啊,能举个例子吗
carlclone
2020-11-19 17:46:31 +08:00
信号。。。
acmore
2020-11-19 17:46:54 +08:00
Resource
2020-11-19 18:10:29 +08:00
安卓可以用 CompletableFuture 吗?
jobsofchina
2020-11-19 18:14:03 +08:00
不懂就问,安卓没有 join()吗
liian2019
2020-11-19 18:20:04 +08:00
CompletionService
winterbells
2020-11-19 18:57:44 +08:00
0xZhangKe
2020-11-19 19:00:04 +08:00
RxJava
tanranran
2020-11-19 19:07:00 +08:00
坐等大佬回复,楼上的说实话,都是不看题目的,LZ 说的是进程,不是线程
kerb15
2020-11-19 19:14:25 +08:00
@acmore 可以用于进程吗
kerb15
2020-11-19 19:15:09 +08:00
@tanranran 哈哈,终于有个看明白的
gam2046
2020-11-19 19:16:50 +08:00
自己利用 Binder 实现类似 ForkJoinPool 的机制或者共享内存( CPP )是比较低成本的方式。但如果不是因为 OOM,这样的工作,不建议使用多进程这样重量级的方式。
knowckx
2020-11-19 19:20:54 +08:00
sync.waitgroup 的味道
mingl0280
2020-11-19 19:30:09 +08:00
hm279
2020-11-19 19:30:38 +08:00
正常人有开三个进程去写一个文件吗?线程吧
hongch
2020-11-19 19:32:19 +08:00
一个 APP 只有一个进程啊,难道是开了多个 service 去写同一个文件?
又或者是开了多个线程去写同一个文件?
tanranran
2020-11-19 20:35:30 +08:00
@hongch #17 安卓是可以多个进程的
hdfg159
2020-11-19 21:59:22 +08:00
RxJava 做任务编排
acmore
2020-11-19 22:18:31 +08:00
@kerb15
@tanranran

每个进程都用一个线程监控,Process 等待结束之后用 CountDownLatch 通知主进程的主线程。这种方法可以做到 “实时” 监控所有进程的情况。也可以用其他的工具,但我觉得 CountDownLatch 是最直接且直观的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/727223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX