我正在测试surfaceView,基本上app jsut会改变背景的颜色。
应用程序启动没有问题但是当我“暂停”活动并“恢复”它时,应用程序在“pause()”方法循环中被阻止。
这是我的代码:
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.util.Log;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class SurfaceViewTest extends Activity {
FastRenderView renderView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_surface_view_test);
renderView= new FastRenderView(this);
setContentView(renderView);
}
protected void onResume() {
super.onResume();
renderView.resume();
}
@Override
protected void onPause() {
super.onPause();
renderView.pause();
}
public class FastRenderView extends SurfaceView implements Runnable {
Thread renderThread=null;
SurfaceHolder holder;
volatile boolean running=false;
Random rand= new Random(); //random number creator----
public FastRenderView(Context context) {
super(context);
holder=getHolder(); //<<-check the this statement
}
public void resume() {
Log.d("ZR", "in resume");
running=true;
renderThread=new Thread(this);
renderThread.start(); //<<<--AVVIA IL THREAD
}
@Override
public void run() {
Log.d("ZR", "in running");
while(running){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!holder.getSurface().isValid())
continue;
Canvas canvas = holder.lockCanvas();
canvas.drawRGB(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255));
holder.unlockCanvasAndPost(canvas);
}
}
public void pause() {
running = false;
Log.d("ZR", "in pause");
while(true){ //<<<<<<<<<<<<<<CHECKKKKKK
try {
renderThread.join();
Log.d("ZR", "in pause end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
答案 0 :(得分:1)
while(true)
循环没有中断,它永远不会在方法pause()
中停止。在成功加入渲染线程(等待它结束)后,我会期待类似返回的东西
使用volatile
声明running
run()
中的while循环应该没问题。