【问题标题】:i'm so confused about Threads我对线程很困惑
【发布时间】:2017-08-05 06:53:21
【问题描述】:

我读了很多关于线程的文章,但还不明白 :( 让我向你解释一下我对线程的了解。我们正在处理的所有工作,例如代码,任何在 UI 线程或主线程上工作的东西,对吧?在那之后如果我们调用 runOnUiThread 会发生什么?我的另一个问题是我们如何知道是时候使用新线程了?我的意思是我们如何理解我们正在处理另一个线程或在新线程中替换或编码?

我知道这是一个不清楚的问题,但我也不明白。请帮帮我谢谢,约翰。

【问题讨论】:

标签: java android multithreading


【解决方案1】:

让我试着回答。实际上Android有主线程(也称为UI线程)和其他线程。

主线程主要用于显示UI,其他线程用于处理其他大进程,例如连接到服务器等。

runOnUiThread 当你想从其他线程移动到主线程时调用。这是必需的,因为只有主线程才能在 UI 上显示/显示结果。所以当你在其他线程上做了一些处理,并且你想在应用程序上显示结果时,你需要通过调用runOnUiThread在主线程上显示它。

只有当它是一个大的或冗长的过程,例如从服务器获取数据、加载数据等时,我们才在其他线程上工作。每当我们想要显示一些 UI 结果时,我们都会从其他线程转移到主线程。

【讨论】:

  • 因此,主线程有时也被称为 UI 线程。这就是docs 所说的。
【解决方案2】:

最简单的方法是使用AsyncTask<> 类。您需要覆盖三个函数。

  1. doInBackGround(...) : 在后台线程中执行的代码。
  2. onPreExecute(..) : 在后台线程之前执行的代码 完成执行,如显示进度条等。
  3. onPostExecute(...):在后台线程之后执行的代码 已完成运行。在此处执行更新 UI 等任务

【讨论】:

    【解决方案3】:

    一般的经验法则是:如果不需要,不要使用多线程。多线程总是容易出错,并且在许多情况下没有任何好处。基本上,每当您执行冗长的操作(即像图像处理等一些广泛的计算)时,您都会启动一个新线程,这会阻塞主线程一段时间,因此应用程序将变得无响应。

    【讨论】:

    • 这根本不是真的。如何不在 android 上使用多线程并拥有高效的应用程序?仅仅因为它可能难以使用而避免并发并不是一个好习惯。
    • 这不是我想说的。我的观点是,如果没有并发的好处,应该避免使用多线程。一个常见的误解是多线程总是一件好事。如果有一些东西可以并行化,即两个或多个相互独立的计算,例如等待设备准备好或冗长的数据处理,这只是一件好事。
    猜你喜欢
    • 2011-04-11
    • 2021-03-09
    • 2020-08-17
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多