<黄逗逗> 2022-06-25 21:10 采纳率: 100%
浏览 11
已结题

在finish一个带有自定义SurfaceView的Activity时发生报错

在finish一个带有自定义SurfaceView的Activity时发生报错

I/ple.planebattl: Thread[6,tid=5848,WaitingInMainSignalCatcherLoop,Thread*=0xe21c1c10,peer=0x13080280,"Signal Catcher"]: reacting to signal 3
I/ple.planebattl: 
I/ple.planebattl: Wrote stack traces to tombstoned

以下是最有可能发生错误的地方:


```java
@Override
    public void run() {
        SurfaceView surfaceView = findViewById(R.id.surfaceView);
        surfaceviewwidth=surfaceView.getWidth();
        surfaceviewheight=surfaceView.getHeight();
        x=surfaceView.getWidth()/2+myplanebit.getWidth();
        y=surfaceView.getHeight()-myplanebit.getHeight()-100;
        timer = new Timer();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                bullet();
            }
        };
        timer.schedule(timerTask,0,300);

        timer2 = new Timer();
        timerTask2 = new TimerTask() {
            @Override
            public void run() {
                enemy();
            }
        };
        timer2.schedule(timerTask2,500,150);

        timer3 = new Timer();
        timerTask3 = new TimerTask() {
            @Override
            public void run() {
                boss();
            }
        };
        timer3.schedule(timerTask3,5000);

        //背景画布
        while (mIsDrawing) {
            long start = System.currentTimeMillis();
            count++;
            if(count>=10000) count = 0;
            draw();//draw总方法

            long end = System.currentTimeMillis();
            if (end - start < 20) {
                try {
                    Thread.sleep(20 - (end - start));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    if (mCanvas != null){
                        //释放canvas对象并提交画布
                        mSurfaceHolder.unlockCanvasAndPost(mCanvas);
                    }
                }
            }
        }
    }

```

  • 写回答

1条回答 默认 最新

  • 不会写代码的猴子 Android领域优质创作者 2022-06-27 09:51
    关注

    SurfaceView是UI操作,不能放在多线程中。
    你需要用多线程在Handler的方式做

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 创建了问题 6月25日

悬赏问题

  • ¥15 【悬赏】canvas 椭圆形内小球边缘与小球碰撞检测
  • ¥50 Delphi5环境下图片文件怎么转换成Base64编码?
  • ¥15 将GPDO_0引|脚设首成PWM1的输出引脚 实验编程该怎么写
  • ¥50 阿里云服务器 CentOS7.9 搭建 openvpn 服务
  • ¥100 开源软件弱点处理规范
  • ¥15 excel如何根据文件名自动搜索并批量导入文件?
  • ¥15 VScode 用户代码片段图标
  • ¥15 streamingtool
  • ¥15 MATLAB图像问题
  • ¥20 树莓派5做人脸情感识别与反馈系统