【问题标题】:Android : Calling the methods on UI thread from AsyncTask doInBackground methodAndroid:从 AsyncTask doInBackground 方法调用 UI 线程上的方法
【发布时间】:2012-03-15 11:59:55
【问题描述】:

我正在使用 AsyncTask 将数据上传到 UI。我编写了代码以以单独的方法从服务器下载数据,并且我从 doinBackground 调用该方法。它会给出错误,因为 UI 方法无法从 doInBackground 访问。但是,我想访问 .是否有任何替代过程可以从 doinBackground 访问 UI 方法?

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    是否有任何替代过程可以从 doinBackground 访问 UI 方法?

    doInBackground() 中致电publishProgress()。将您的 UI 更新逻辑放在您的 AsyncTask 中的 onProgressUpdate() 中。在您调用 publishProgress() 之后,将在主应用程序线程(也称为 UI 线程)上调用 onProgressUpdate()Here is a sample project 演示了这一点。

    【讨论】:

    • CommonsWare 名字就够了。 +1。
    • 知道 runOnUiThread() 方式,但喜欢另一种处理 +1 的方法。
    • 嗨,我在链接中找到了很好的答案。非常感谢
    【解决方案2】:

    调用 runOnUiThread(Runnable action)

    more here

    【讨论】:

    • 嗨,我可以从 doInBackground 调用 runOnUiThread() 吗?它会工作。?或者像往常一样,我可以从 oncreate 本身调用 runOnUiThread 吗?在这里我有一个疑问。 runOnUiThread 会在上传数据时阻塞 UI。?
    • 从 doInBackground() 调用它时有意义.. 否则没有意义..
    • 您必须在更新主 UI 的地方编写 runOnUIThread。
    【解决方案3】:

    仅将doInBackground() 用于以下任务:

    1. 花点时间
    2. 与 UI 无关

    然后你可以实现 AsyncTask.onPostExecute() 来运行代码来处理来自 AsyncTask 的主 UI 线程上的结果

    来自AsyncTask.onPostExecute()的JavaDoc:

    “doInBackground 之后在 UI 线程上运行。...”

    【讨论】:

      【解决方案4】:

      正如其他人所指出的,您可以使用 runOnUiThread。但是,您想在 doInBackground 中执行此操作似乎有点奇怪。如果您想向用户指示进度,您需要在 AsyncTask.onProgressUpdate 中处理它并在您的 doInBackground 中调用 publishProgress。

      您可以在此处阅读有关 AsyncTask 的更多信息:http://developer.android.com/reference/android/os/AsyncTask.html

      -丹

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-01
        相关资源
        最近更新 更多