启动一个线程关闭我的Android应用程序

时间:2017-03-14 03:44:33

标签: java android multithreading sleep runnable

我希望我的线程创建相等时间的延迟并在每个时间块后生成一个toast。我尝试了以下代码,但只要按下按钮就会关闭我的应用程序:

WebView

2 个答案:

答案 0 :(得分:0)

您正在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

答案 1 :(得分:0)

问题是你无法在非Ui线程中访问Ui元素。所以你必须获得运行时异常。您可以使用runOnUi()或Handler在主线程上执行此操作。其中runOnUi()是Activity类的方法,而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线程中创建它。