gpt4 book ai didi

java - Android/Java 关于线程的决定

转载 作者:行者123 更新时间:2023-12-01 18:28:07 27 4
gpt4 key购买 nike

好的,在尝试了一下 Android SDK 之后,我决定开发一个完整的应用程序。不一定要在商店上发布(我真的没有可用的工具来进行适当的质量检查,所以感觉不对;我只能在我的一台个人设备上进行测试)这主要只是一个个人娱乐项目和学习。最后,我决定使用相机应用程序,因为我经常使用相机,所以如果我制作了它,我最终会实际使用它,而且因为我对新的 Camera2 API 的功能感到非常兴奋Android L 并想尝试一下。

无论如何,我已经思考应用程序的设计/架构一段时间了,我遇到了一个我无法真正解决的潜在问题,因为我不仅不太熟悉这种性质的 GUI 编程,而且在 Java 和 Android SDK 上不是 100%。它们都远远超出了我日常工作的范围。

现在我知道我确实需要将我的 UI 线程与其他所有线程分开,但我不确定的是,首先,我应该将额外的线程用于什么(我正在考虑一个来处理图像捕获和存储,还有另一个来处理设置?也许这样做已经结束了)以及是否有 UI 线程通过事件与之通信的后台线程,或者只是在需要时生成线程。也许有一个中间后台线程在 UI 线程和任何需要完成的后台处理之间进行仲裁?我想问的是,我如何决定这些事情?有一般/最佳实践吗?

我真的很想问,因为我想正确地完成这件事,并事先彻底规划好申请,因为在过去,我发现如果我直接投入进去,我很容易感到困惑,最终失去信心并放弃项目。我希望有人能提供帮助。我发现这个问题不容易用 Google 提供令人满意的结果的方式表达。

最佳答案

我想你可以考虑这样考虑:

UI 线程是大多数东西运行的地方。有时,它也被称为“主”线程,因为它是,呃...主线程。

除非您的程序非常复杂,否则您可能不需要担心线程的体系结构。您需要担心的只是从 UI 线程中获取缓慢的内容。就是这样。你不关心它们去了哪里,只关心 UI 线程。

如果您购买它,有一些不错的选择:

  1. Intent 服务:打个比喻,如果您需要在“后台”运行的方法具有空返回类型,那么 Intent 服务就是完美的解决方案。您可以使用 Intent 与它进行通信,并且由于它只有一个线程,因此您提交给该线程的任务将按顺序运行。
  2. AsyncTask:这些充满了问题,但人们用它们完成了大量的编程。它们在大约 6 个线程的池中运行,但(令人惊讶!)无论如何都按顺序运行。
  3. 您自己的 Java 执行器:如果您需要类似于 AsyncTask 的行为,但需要更多控制,请使用此执行器。
  4. 每个任务新建线程:不要这样做。真的。

但是,在任何这些情况下,您并不真正关心任务正在哪些线程上运行。您制定一项有关目标设备上有意义的线程数的策略,然后在其中一个线程上运行速度较慢的内容。

...“慢”应该包括所有 I/O:数据库、文件系统、网络等,以及主要计算。

关于java - Android/Java 关于线程的决定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25333624/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com