thread.sleep(long millis)在 Android 中不起作用
thread.sleep(long millis) doesn't work in Android
我想在Android中做一个简单的动画。我按照本系列教程设置了基本 java 代码:
https://www.youtube.com/watch?v=UH2OWnq7NQ4
为了能够控制帧率,我添加了行thread.sleep(500);
。但是,这条线有红色下划线,如果我将鼠标悬停在它上面,它会显示:
Unhandled exception: java.lang.interruptedException
我做错了什么?谢谢!
public class AnimationActivity extends SurfaceView implements Runnable {
Thread thread = null;
boolean canDraw = false;
Bitmap backgroundBlack;
Canvas canvas;
SurfaceHolder surfaceHolder;
public AnimationActivity(Context context) {
super(context);
surfaceHolder = getHolder();
backgroundBlack = BitmapFactory.decodeResource(getResources(), R.drawable.background_black);
}
@Override
public void run() {
while (canDraw) {
if (!surfaceHolder.getSurface().isValid()) {
continue;
}
canvas = surfaceHolder.lockCanvas();
canvas.drawBitmap(backgroundBlack,0,0, null);
//drawing stuff here
surfaceHolder.unlockCanvasAndPost(canvas);
thread.sleep(500)
}
}
public void pause() {
canDraw = false;
while (true) {
try {
thread.join();
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
thread = null;
}
public void resume() {
canDraw = true;
thread = new Thread(this);
thread.start();
}
}
它不是 "not working" - 但它可能会抛出一个 InterruptedException,您也必须声明抛出(在方法签名中抛出 InterruptedException),或者您应该捕获它:
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
PS:sleep是一个静态方法,应该以静态方式调用:Thread.sleep而不是thread.sleep
我想在Android中做一个简单的动画。我按照本系列教程设置了基本 java 代码:
https://www.youtube.com/watch?v=UH2OWnq7NQ4
为了能够控制帧率,我添加了行thread.sleep(500);
。但是,这条线有红色下划线,如果我将鼠标悬停在它上面,它会显示:
Unhandled exception: java.lang.interruptedException
我做错了什么?谢谢!
public class AnimationActivity extends SurfaceView implements Runnable {
Thread thread = null;
boolean canDraw = false;
Bitmap backgroundBlack;
Canvas canvas;
SurfaceHolder surfaceHolder;
public AnimationActivity(Context context) {
super(context);
surfaceHolder = getHolder();
backgroundBlack = BitmapFactory.decodeResource(getResources(), R.drawable.background_black);
}
@Override
public void run() {
while (canDraw) {
if (!surfaceHolder.getSurface().isValid()) {
continue;
}
canvas = surfaceHolder.lockCanvas();
canvas.drawBitmap(backgroundBlack,0,0, null);
//drawing stuff here
surfaceHolder.unlockCanvasAndPost(canvas);
thread.sleep(500)
}
}
public void pause() {
canDraw = false;
while (true) {
try {
thread.join();
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
thread = null;
}
public void resume() {
canDraw = true;
thread = new Thread(this);
thread.start();
}
}
它不是 "not working" - 但它可能会抛出一个 InterruptedException,您也必须声明抛出(在方法签名中抛出 InterruptedException),或者您应该捕获它:
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
PS:sleep是一个静态方法,应该以静态方式调用:Thread.sleep而不是thread.sleep