题
我的应用程序将启动一个线程来查询一些数据网络。我想显示敬酒消息时没有被发现,但我的申请老是死机。
我已经使用的应用程序上下文从线程内尝试,像这样:
Toast.makeText(getApplicationContext(), "testttt", Toast.LENGTH_LONG).show();
我也试着与吐司呼叫建立一个Runnable并从线程(吐司呼叫在此可运行使用活性作为第一个参数)调用runOnUiThread(可运行)。
有没有人对如何做到这一点任何想法?
解决方案
尝试内部张贴到Handler对象。
final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
public void run() {
Toast(this, message, duration).show();
}
new Thread() {
public void run() {
mHandler.post(mUpdateResults);
}
}.start();
其他提示
Toast.makeText().show()
绝对需要在UI线程上运行。
您应该使用像屋大维Damiean一个的AsyncTask提到,但这里的使用runOnUiThread如果你设置一些代码上使用:
public void showToastFromBackground(final String message) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
});
}
尝试在Activity类实施延伸“处理程序”的一类,并从其他线程发送消息给它。更详细地说明此:
http://www.anddev.org/the_pizza_timer_-_threading-drawing_on_canvas- t126.html
和请,问这样的问题时,包括你所得到的堆栈跟踪。
如果你从你的活动类运行处理,你可以设置上下文仅通过引用您的活动的。这就像这样:
final Runnable showToastMessage = new Runnable() {
public void run() {
Toast.makeText(YourActivity.this, "Message", Toast.LENGTH_SHORT).show();
}
};
不隶属于 StackOverflow