【问题标题】:Appropriate use of threads in AndroidAndroid中正确使用线程
【发布时间】:2016-10-23 12:15:46
【问题描述】:

在 android 应用程序中,当我们执行网络操作时,我们主要使用线程,而不是主 UI 线程。我见过同时使用多个线程的核心 Java 应用程序。那么在Android中使用多个线程而不是网络操作是一个好习惯吗?我觉得如果我使用多个线程并且它们直接影响我的应用程序流的原因之一,那么它可能会导致数据不匹配,因为其中一个线程可能在 Ui 更新或用户遍历到下一个活动时尚未执行。所以所有的数据操作都应该同步发生。所以基本上像纯java应用程序一样在android中使用多线程是一个好习惯吗?还有为什么这种情况不会出现在 java 应用程序中?是因为与适当的机器相比,移动设备处理多个进程的能力较低吗?谢谢。

【问题讨论】:

  • 是的。这很正常。使用它们
  • @Vyacheslav 所以让我们说我正在研究一种方法,其中大量数据正在 arraylist 中更新,它会影响 UI,我必须在单独的线程中使用它吗?如果用户执行一些其他操作或遍历到下一个活动怎么办?
  • @Pritish,除了主线程之外,您无法从其他线程更改 UI。如果您尝试实现的内容不会更改 UI,您可以使用将在后台运行并在完成时通知主线程的 AsynchTask。但是,在您的示例中,您想要更新 UI,因此我要么在主线程下编写代码,要么使用 activity.runOnUiThread - 这是一个可以帮助您实现请求的处理程序实例。
  • 每个网络线程都不能在 ui 线程内工作。否则,它会处理错误
  • “为什么在 java 应用程序中不会出现这种情况?” 很抱歉不同意。它们确实发生了。很多。

标签: java android multithreading


【解决方案1】:

您问错了问题:真正的问题应该是:我如何设计我的 Android 应用程序来为用户提供最佳的用户体验?

作为程序员,您使用概念不是因为它们存在,而是因为它们为您正在做的事情添加了价值

例如,您查看线程以确保您的应用不会阻塞或变得无响应。如果您的应用需要做许多不同的事情,那么这些事情可以在一定程度上“并行”发生是很有意义的。

当然,线程会为您的逻辑添加复杂性;当然,当您开始使用线程时,您需要知道自己在做什么。使用多个线程本身会导致 数据不匹配

当你不知道自己在做什么时会导致问题!

长话短说:你的问题听起来更像是我不确定如何在 Android 上进行多线程编程;因此,您应该研究该主题;以here 开头!

编辑:最后,这是关于平衡和务实。一方面,是的,(正确!)多线程为您的应用程序增加了价值;但当然,就额外的复杂性而言,还有成本。所以基本的答案可能是:做觉得舒服的事。如果您觉得多线程使您更难交付正确工作的产品,那么回答了您的问题 - 您不应该使用您所使用的东西不舒服!

【讨论】:

  • 虽然你对问题部分可能是正确的,也就是说,是的,这与我是否可以通过使用线程来改善用户体验有关,但实际上我不确定我是否应该这样做,因为即使是微小的不匹配也会在应用程序中产生问题。例如,在我最后一个应用程序中,我在单击通知时遍历到 viewpager 中的子片段,但很多时候只是因为在片段正确附加之前会调用某些 UI 方法,我的应用程序会崩溃。所以我不得不在许多方法中实现 is added() 。
  • 所以我舍不得用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多