Android:surfaceView 无法从 pause() 恢复活动



我正在测试surfaceView,基本上应用程序只是改变了背景的颜色。

该应用程序

开始时没有问题,但是当我"暂停"活动并"恢复"它时,该应用程序在"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();
                }
            }
        }
    }
}

没有中断的while(true)循环永远不会在方法 pause() 中停止。我希望在成功加入渲染线程后返回(等到它结束)

通过volatile声明running run()中的while循环应该没问题。

最新更新