【问题标题】:Besides AsyncTask, is there anyway in Android to do something on the UI thread from another thread?除了 AsyncTask,Android 中是否还有其他线程在 UI 线程上执行某些操作?
【发布时间】:2013-07-25 23:40:45
【问题描述】:

由于一些奇怪的原因,当我使用 AsyncTask 连接到网页时,当 AsyncTask 连接到网页时,我的应用程序的 UI 几乎停滞不前。

我认为这是因为连接通常需要很长时间,至少 4 秒。

我希望能够在我的线程完成后更新我的 TextView,但是除了使用 AsyncTask 之外,我如何在 Android 中做到这一点?

【问题讨论】:

  • 您可以使用线程并使用runonUithread更新ui。
  • 您可以使用runOnUiThread or Handlers。但是,如果您发布您的 AsyncTask,我们可能会看到它滞后的原因,以及是否有办法解决您所拥有的问题
  • @codeMagic 我发布了这个stackoverflow.com/questions/17855919/… 但不幸的是,尽管有帮助,我的用户界面仍然滞后。
  • 贴出你的异步任务代码,也许可以优化一下。
  • @forgivegod stackoverflow.com/questions/17855919/… 如果有人能解决我的问题就好了!

标签: java android multithreading android-asynctask


【解决方案1】:

有几种方法可以做到这一点:

  • 使用线程或 Runnables
  • 使用处理程序,向其发送消息
  • 使用 RunOnUIThread 方法
  • 使用方法(这是我最喜欢的)帖子。不必使用上下文/活动实例

例如,您可以创建一个新的 Handler() 并且当您想在主线程中运行代码时:

  public static Handler interfaceHandler = new Handler();

 ...

  mInterfaceHandler.post(new Runnable() {

        @Override
        public void run() {
            //Your stuff
        }
    });

为了补全信息,Android 中的所有 Views 都可以做这个 post(Runnable) 。这种方法为他们的任务添加一个可运行的,因此建议不要使用视图,因为应用程序会变慢。静态处理程序非常适合完成这项工作,并且非常容易实现

【讨论】:

    【解决方案2】:

    这样的东西应该可以工作

    runOnUiThread(new Runnable() {
           public void run() {
                // do some stuff here
           }
       });
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多