我希望我的线程创建相等时间的延迟,并在每个时间块之后生成敬酒。我尝试了以下代码,但是一旦按下按钮即可关闭我的应用程序:
@Override
public void onClick(View v) {
new Thread() {
@Override
public void run() {
try
{
Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show();
sleep(5000);
Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show();
sleep(5000);
Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(context, "Exception", Toast.LENGTH_SHORT).show();
}
}
}.start();
问题是您无法在非UI线程中访问UI元素。因此,您必须获得运行时例外。您可以使用Runonui()或处理程序在主线程上进行操作。其中runonui()是一种活动类的方法,而处理程序允许您发送和处理与线程MessageQuely关联的可运行对象。
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show();
}
});
或者您可以使用处理程序
new Handler().post(new Runnable() {
@Override
public void run() {
Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show();
}
});
只需确保创建一个新处理程序时,它会绑定到创建它的线程的线程/消息队列。因此,您不得在非UI线程中创建它。
您在UI或主线程中创建另一个线程,因此无法在此处打印或更新UI,因此您需要在UI线程中打印吐司消息,例如在线程中的内部浏览,
ActivityMain.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show();
}
});
//ActivityMain is the name of activity in which you are working