Java Android Studio中的线程(onClick)
我正在使用简单线程的easy代码,这显然在java上非常有效。 有一次我想在Android Studio上运行一个非常类似的程序(我想在点击一个按钮后运行) 一切都不顺利: 我的纽扣Java Android Studio中的线程(onClick),java,android,multithreading,Java,Android,Multithreading,我正在使用简单线程的easy代码,这显然在java上非常有效。 有一次我想在Android Studio上运行一个非常类似的程序(我想在点击一个按钮后运行) 一切都不顺利: 我的纽扣 public void onClickRoll(View v) throws InterruptedException { System.out.println("START!"); t.start(); while (t.isAlive()) {
public void onClickRoll(View v) throws InterruptedException
{
System.out.println("START!");
t.start();
while (t.isAlive()) {
System.out.println("Still waiting...");
t.join(1000);
}
System.out.println("EVERYTHING TERMINATED");
}
我的帖子:
private static class Sender
implements Runnable {
public void run() {
try {
for (int i = 0; i < 10; i++) {
Thread.sleep(400);
System.out.println("You've already been waiting:" +(float)i*0.4+"s");
}
} catch (InterruptedException e) {
System.out.println("ERROR!");
}
}
错误显示带有t.start()的行
开始应用时,控制台会显示错误,
当我第一次运行应用程序时,它的线程工作正常(无错误),当我再次单击按钮时,它崩溃(有相同的错误),(我等待10秒以确保线程结束)
少了什么?
除了InteliJ,我们还需要在Android Studio上使用treading做些别的事情吗
其他问题:
为什么这个代码也起作用?它不是新线程,但显示相同的错误:
for (int i = 0; i < 10; i++) {
wait(400);
System.out.println("You've already been waiting:" +(float)i*0.4+"s");
}
for(int i=0;i<10;i++){
等待(400);
System.out.println(“您已经在等待:”+(float)i*0.4+“s”);
}
我假设您在某个地方有代码来创建t,比如线程t=新线程(…)
因此,不能多次启动线程。因此,您应该将createt放在onClick方法中。这是最简单的部分
要持续使用线程,您需要与它进行通信,这远远超出您的问题。以下几点:
- 您的IDE(Android Studio)与您的问题完全无关(我已编辑您的问题以删除标记)
- 在Android框架中,发送到stdout的所有内容,例如,
System.out.println
都发送到/dev/null,您永远不会看到它
- Android框架中的线程有非常具体的要求。如果你非常小心的话,你可以启动自己的线程,但在任何情况下你都不应该启动,除非你正在为Android编写一个多线程框架,即使这样,也可能不会。你应该读一读
- 我猜您是通过将主UI线程连接到后台线程来引发问题的。如果您阅读developer.android.com指南中的信息,您将看到您不应该在主UI线程上执行任何耗时的操作
您的IDE应该与您的程序无关。我会仔细阅读所有内容,谢谢您的回答,您说没有很多情况下我们应该使用线程,那么如何替换它们?这只是我的应用程序中的动画。有一句话,我在控制台中看到的“System.out.println”中的所有内容,很明显……不是不应该使用线程,而是不应该直接创建线程。有更高级的Android线程构造。您的IDE可能正在拦截System.out,但如果没有IDE,这将不会进入标准Android日志-请参阅
for (int i = 0; i < 10; i++) {
wait(400);
System.out.println("You've already been waiting:" +(float)i*0.4+"s");
}