Android 对长时间方法使用处理程序
在执行搜索时,我使用处理程序使UI响应。我使用了Handler,但为什么它仍然显示错误“只有创建视图层次结构的原始线程才能接触其视图”Android 对长时间方法使用处理程序,android,Android,在执行搜索时,我使用处理程序使UI响应。我使用了Handler,但为什么它仍然显示错误“只有创建视图层次结构的原始线程才能接触其视图” 编辑:我遵循了。问题在于搜索词中的这一行: resultTextView.setText(result); 它需要在UI线程上执行,但正在搜索线程中运行。替换为: searchHandler.post(new Runnable() { @Override public void run() { resultTextView.se
编辑:我遵循了。问题在于
搜索词中的这一行:
resultTextView.setText(result);
它需要在UI线程上执行,但正在搜索线程中运行。替换为:
searchHandler.post(new Runnable() {
@Override
public void run() {
resultTextView.setText(result);
}
});
问题在于搜索词中的这一行:
resultTextView.setText(result);
它需要在UI线程上执行,但正在搜索线程中运行。替换为:
searchHandler.post(new Runnable() {
@Override
public void run() {
resultTextView.setText(result);
}
});
searchWord方法的问题在于它仍然从另一个线程更新UI,请尝试将代码保留在处理程序中
private final Handler searchHandler = new Handler() {
@Override
public void handleMessage(final Message msg) {
super.handleMessage(msg);
//call searchWord method from here depends upon your logic
progressDialog.dismiss();
};
};
searchWord方法的问题在于它仍然从另一个线程更新UI,请尝试将代码保留在处理程序中
private final Handler searchHandler = new Handler() {
@Override
public void handleMessage(final Message msg) {
super.handleMessage(msg);
//call searchWord method from here depends upon your logic
progressDialog.dismiss();
};
};
我回答了一个类似的问题
编写AsyncTask类来替换所有线程/消息传递代码以及简化典型的“show dialog/do background task/stop dialog”应用程序要容易得多
我在那里编写的代码可以直接插入您的代码,用您的searchWord()
替换doLogin()
我强烈建议您编写线程和处理程序的每个实例都使用AsyncTask类替换它们。我回答了一个类似的问题
编写AsyncTask类来替换所有线程/消息传递代码以及简化典型的“show dialog/do background task/stop dialog”应用程序要容易得多
我在那里编写的代码可以直接插入您的代码,用您的searchWord()
替换doLogin()
我强烈建议您编写线程和处理程序的每个实例,用AsyncTask类替换它们。这个答案不是最好的,但它适用于我的问题!我决定改用AsyncTask。这个答案不是最好的,但它适用于我的问题!我决定改用AsyncTask。