线程错误“无法在Android中使用未调用Looper.Prepare的线程内创建处理程序”

时间:2011-06-03 21:03:57

标签: android

我目前正在开发一款Android应用,我需要在线程中执行一个方法。我有以下代码来创建线程并执行

new Thread(new Runnable() { 
      @Override
      public void run() {
          new DownloadSync(getApplicationContext());
      }
}).start();

当我尝试运行此代码时,它会在log cat中显示错误消息:

  

java.lang.RuntimeException:无法在未调用Looper.Prepare()的线程内创建处理程序。

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

使用AsyncTask。你的情况是它存在的原因。另外,请阅读Painless Threading(主要使用AsyncTask)。

您的代码存在的问题是某些内容尝试在新线程内部使用Handler,但没有任何内容告诉Looper准备。

答案 1 :(得分:0)

我之前的回答并不是很有帮助 - 我已将其删除并保留了相关内容:

确保您的DownLoadSync对象仅通过处理程序与主UI线程通信(如果您想避免使用AsyncTask) 声明一个runnable和一个处理程序,如下所示:

final Runnable updateMainUIThread = new Runnable() {
        public void run() {
            Toast.makeText(getBaseContext(), "Communicating with the main thread!!", Toast.LENGTH_LONG).show();
        }
    };


private final Handler handler = new Handler();`

并像这样使用它:     handler.post(updateMainUIThread);