我目前正在开发一款Android应用,我需要在线程中执行一个方法。我有以下代码来创建线程并执行
new Thread(new Runnable() {
@Override
public void run() {
new DownloadSync(getApplicationContext());
}
}).start();
当我尝试运行此代码时,它会在log cat中显示错误消息:
java.lang.RuntimeException:无法在未调用Looper.Prepare()的线程内创建处理程序。
如何解决此问题?
答案 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);