0

至于每个 Android-dummy,我也遇到了FATAL EXCEPTION

java.lang.IllegalThreadStateException: Thread already started

滚动论坛和问题,我看到一个线程无法启动两次。我见过这样的答案:

“不止一次启动线程不是一个好主意。”

“一个线程只能调用一次。”

但是没有人说为什么一个线程只能被调用一次。对我来说这听起来很奇怪,有一个 Android 函数天生只能被调用一次。

为什么一个线程只能调用一次?

我正在开发一个应用程序,每次点击屏幕时我都必须调用动画。我认为 Thread 可能是最适合我的工具。我错了吗?

更新

也许这个问题不清楚。

我不是在问为什么一个线程在它还活着的时候不能重新启动。

我在问为什么我已经运行但现在已经完成的线程(所以它不是活着的)不能被第二次调用。

这是我完全简化的代码。线程第一次被调用,onCreate第二次被调用onClick,所以当我点击图像时。在第二次通话中,我可以看到Android Monitor线程不是活着的,尽管它无论如何都没有启动。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        chiamaDatabase();
        RESET.start();

        ImageView image = (ImageView) findViewById(R.id.imageView2);
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!RESET.isAlive()) {
                    RESET.start();
                }
            }
        });
    }

    public Thread RESET = new Thread() {
        public void run() {
            final ImageView image = (ImageView) findViewById(R.id.imageView2);
            Random random = new Random();
            int n = random.nextInt(2);
            image.setX(320+n);
            image.setY(400+n);
        }
    };
4

1 回答 1

0

你应该看看什么是线程:https://en.wikipedia.org/wiki/Thread_(computing)

启动一个已经在运行的线程是没有意义的,因此,当有人试图启动一个已经在运行的线程时,语言必须选择要做什么:

  1. 忽略命令
  2. 抛出错误

Java 选择做第二个,我认为这是最好的做法。

如果您真的必须重新启动线程,您将无法使用 Java。检查描述 Java 中线程生命周期的链接:http ://www.roseindia.net/java/thread/life-cycle-of-threads.shtml

你也可以参考这个其他 StackOverflow 线程:如何重新启动死线程?

于 2017-04-30T12:12:19.443 回答