为什么线程在第二次通话时崩溃?

时间:2017-04-27 20:05:13

标签: android multithreading onclick

我有一个非常简单的程序。在activity_main.xml我只有以下ImageView

<ImageView
    android:id="@+id/imageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="play"
    android:scaleType="matrix"
    android:scaleX="2"
    android:scaleY="2"
    app:srcCompat="@drawable/ic_play" />

点击图像,它应该开始以下活动。

public void play(View view) {
        Log.i("Luigi","ciao");
        WORD.start();
    }

public Thread WORD = new Thread() {
        public void run() {
        }
    };

正如您所看到的,活动完全是空的,所以它不应该给出任何问题。如果我第一次点击图像,它就有效。问题是,在我第二次点击图像时,程序崩溃了。

有没有人有这个理由?我无法解释这种行为,也因为我将活动完全留空了。

解决

我用以下方式解决了AsyncTask。

public void play(View view) {
        Log.i("Luigi","ciao");
        new WORD().execute();
    }

    private class WORD extends AsyncTask<Void, Integer, String>
    {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(Void... arg0)
        {
            return "Work executed!";
        }

        @Override
        protected void onProgressUpdate(Integer... values)
        {
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(String result)
        {
            super.onPostExecute(result);
            Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
        }
    }

1 个答案:

答案 0 :(得分:0)

查看Thread API,特别是start()函数:
http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#start()

在已经运行的线程上调用start()将引发异常,这就是您的情况。

反正有线程有什么意义?如果您告诉我们您想要实现的目标,我们可能会帮助您。

另外,看看Android Studio中的logcat,它将帮助您找到崩溃的原因。