Android:surfaceView 无法从 pause() 恢复 Activity

标签 android surfaceview onpause

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

应用程序启动没有问题,但是当我“暂停” Activity 并“恢复”它时,应用程序在“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() 中停止。我希望在成功加入渲染线程后返回类似的东西(等到它结束)

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

关于Android:surfaceView 无法从 pause() 恢复 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19200972/

相关文章:

android - 具有 m 列的 n 个表的 SQLite 联合

android - Android Studio 中 SurfaceView 上的拉伸(stretch)相机预览

android - 如何关闭警报框?

java - 我需要帮助暂停和恢复游戏

android - CountDownTimer 完成后如何关闭应用程序?

android - 单击 TextView 时如何制作动画?

android - 如何让另一个应用程序在 Android 中显示通知?

android - 布局中的 SurfaceView

android - 相机预览显示黑屏

android - onCreate() 在 Activity 停止(但未销毁)时调用。仅在安装后