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

时间:2013-10-05 18:01:16

标签: android surfaceview onpause

我正在测试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();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

while(true)循环没有中断,它永远不会在方法pause()中停止。在成功加入渲染线程(等待它结束)后,我会期待类似返回的东西

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