启动线程会关闭我的 android 应用程序
Starting a thread closes my android application
我希望我的线程创建相等时间的延迟并在每个时间块后生成一个 toast。我尝试了以下代码,但它会在我按下按钮后立即关闭我的应用程序:
@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,因此您需要在 UI 线程中打印 toast 消息,就像下面的方法一样在你的主题中,
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
问题是您无法在非 Ui 线程中访问 Ui 元素。所以你必须得到一个运行时异常。您可以使用 runOnUi() 或 Handler 在 Main Thread 上执行此操作。其中 runOnUi() 是 Activity class 的方法,Handler 允许您发送和处理与线程的 MessageQueue 关联的 Message 和 Runnable 对象。
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();
}
});
只需确保在创建新的 Handler 时,它已绑定到创建它的线程的线程/消息队列。所以你不能在非 Ui 线程内创建它。
我希望我的线程创建相等时间的延迟并在每个时间块后生成一个 toast。我尝试了以下代码,但它会在我按下按钮后立即关闭我的应用程序:
@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,因此您需要在 UI 线程中打印 toast 消息,就像下面的方法一样在你的主题中,
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
问题是您无法在非 Ui 线程中访问 Ui 元素。所以你必须得到一个运行时异常。您可以使用 runOnUi() 或 Handler 在 Main Thread 上执行此操作。其中 runOnUi() 是 Activity class 的方法,Handler 允许您发送和处理与线程的 MessageQueue 关联的 Message 和 Runnable 对象。
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();
}
});
只需确保在创建新的 Handler 时,它已绑定到创建它的线程的线程/消息队列。所以你不能在非 Ui 线程内创建它。