Android 为什么一个线程只能启动一次?

Android 为什么一个线程只能启动一次?,android,multithreading,android-thread,Android,Multithreading,Android Thread,对于每个Android虚拟机,我也会遇到致命异常 java.lang.IllegalThreadStateException: Thread already started 滚动论坛和问题,我看到一个线程不能启动两次。我见过这样的答案: “多次启动线程不是一个好主意。” “一个线程只能调用一次。” 但是没有人说为什么一个线程只能调用一次。对我来说这听起来很奇怪,有一个Android函数天生只能被调用一次 为什么一个线程只能调用一次 我正在开发一个应用程序,每次我点击屏幕时都要调用一个动画。我认

对于每个Android虚拟机,我也会遇到
致命异常

java.lang.IllegalThreadStateException: Thread already started
滚动论坛和问题,我看到一个线程不能启动两次。我见过这样的答案:

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

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

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

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


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

更新

也许问题还不清楚

我不是在问为什么线程在活动时不能重新启动

我在问为什么我已经运行但现在已经完成的线程(因此它不是活动的)不能再次调用

这是我完全简化的代码。第一次在
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);
        }
    };

您应该看看线程是什么:

启动已经运行的线程是没有意义的,因此,当有人试图启动已经运行的线程时,语言必须选择要执行的操作:

  • 忽略该命令
  • 出错
  • Java选择做第二个,我认为这是最好的选择

    如果您真的必须重新启动线程,那么您将无法使用Java。检查描述Java线程生命周期的链接:


    您还可以参考另一个StackOverflow线程:

    发布相关代码……”“我认为线程可能是最适合我的工具”——标准Android动画通常不需要线程。“但是没有人说为什么一个线程只能被调用一次”——因为这就是他们在大约20年前实现Java类的方式。问“为什么开发人员X做出决定Y”的问题在堆栈溢出上不起作用。通常,只有开发人员X可以回答这个问题,而开发人员X在这里可能没有帮助。通常,其他人只能提供意见。@rafsanahmad007 done:)谢谢你的回答。抱歉,我的问题不是很清楚:我刚才说的是一个线程,我已经运行了,但现在不再运行了,对于Android来说,它是
    RESET.isAlive()=false
    。我已经更新了问题,使之更清楚。