【问题标题】:Android running on UI thread even when using worker thread即使使用工作线程,Android 也会在 UI 线程上运行
【发布时间】:2013-01-21 22:13:20
【问题描述】:

我正在使用工作线程,如 here 所述,但代码仍然阻塞 UI。如果我在 run() 方法的开头睡觉,它不会阻塞 UI。问题是,它是从 onCreate 方法运行的繁重代码,但无论我做什么,我都无法让它不阻塞 UI。我做错了什么?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 1000000; i++) {
                Log.d("asdf", "asdf");
            }
        }
    }).start();
}

【问题讨论】:

  • 我们可以看看你表达的一些代码有问题吗?
  • 是什么让您认为它按原样阻塞了 UI 线程?
  • @A--C,你见过android中的线程吗? here
  • 嘿,你是对的......这是别的东西!回到绘图板...感谢您的时间
  • @vault 你说得对,我从未在 Android 中看到过线程。 Ty 获取链接!

标签: android multithreading user-interface


【解决方案1】:

您没有使用 AsyncTask - 这是 Android 用来在 UI 线程之外执行长时间运行进程的控件。

底线,使用这个,你会取得更大的成功。

AsyncTask Android example

【讨论】:

    【解决方案2】:

    使用Handler.runOnUiThread(runnable) 调用您的UI 线程。 您也可以在没有 Runnable 的情况下执行线程,如下所示:

    new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 1000000; i++) {
                    Log.d("asdf", "asdf");
                }
            }
        }).start();
    

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多