Java 启动线程将关闭我的android应用程序

Java 启动线程将关闭我的android应用程序,java,android,multithreading,sleep,runnable,Java,Android,Multithreading,Sleep,Runnable,我希望我的线程创建相等时间的延迟,并在每个时间块之后生成一个toast。我尝试了以下代码,但按下按钮后它会立即关闭我的应用程序: @Override public void onClick(View v) { new Thread() { @Override public void run() { try { Toast

我希望我的线程创建相等时间的延迟,并在每个时间块之后生成一个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()或处理程序在主线程上执行此操作。其中runOnUi()是活动类的方法,处理程序允许您发送和处理与线程MessageQueue关联的消息和可运行对象

runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show();
        }
    });
或者您可以使用Handler

 new Handler().post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show();
        }
    });

只需确保在创建新处理程序时,它已绑定到正在创建它的线程的线程/消息队列。因此,您不能在非Ui线程中创建它。

您遇到了什么错误?