android - 如何暂停和恢复 surfaceView 线程

标签 android multithreading surfaceview

我有一个 surfaceView 设置并正在运行,但是当我恢复它时,我收到一条错误消息,指出线程已经启动。当应用程序进入后台然后返回前台时,正确的处理方式是什么?我已经修修补补并设法让应用程序在不崩溃的情况下返回......但是 surfaceView 不再绘制任何东西。我的代码:

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
           Log.e("sys","surfaceCreated was called.");
           if(systemState==BACKGROUND){
                  thread.setRunning(true);

           }
           else {
        thread.setRunning(true);
               thread.start();
               Log.e("sys","started thread");
               systemState=READY;
           }



    }
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
           Log.e("sys","surfaceDestroyed was called.");
           thread.setRunning(false);
           systemState=BACKGROUND;
    }

最佳答案

简单的解决方案是简单地杀死并重新启动线程。创建方法 resume() - 创建线程对象并启动它 - 和 pause() - 终止线程(参见 Lunarlander 示例) - 在您的 SurfaceView 类中,并从 surfaceCreated 和 surfaceDestroyed 调用它们以启动和停止线程。

现在在运行 SurfaceView 的 Activity 中,您还需要从 Activity(或 fragment )的 onResume() 和 onPause() 调用 SurfaceView 中的 resume() 和 pause() 方法。这不是一个优雅的解决方案,但它会起作用。

关于android - 如何暂停和恢复 surfaceView 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527621/

相关文章:

android - AlarmManager 有时不唤醒手机 (XPERIA)

android - 获取在 EditText 中按下的键

java - 主线程的 sleep 抛出 InterruptedException

android:如何通过更新 Surface 缓冲区从 ndk 更新 SurfaceView?

android - 如何在surfaceview android上绘制图像

android - 在工具栏溢出菜单中显示菜单项图标时,这种奇怪的情况是如何发生的?

java - 密码函数 : WRONG FINAL BLOCK LENGTH Android Studio

java - 即使使用synchronized关键字,线程输出也不一致

Python 3、Tkinter 和线程化长时间运行的进程,OOP 风格

android - 如何将标准滚动条添加到 SurfaceView?