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

在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 求多普勒频移瞬时表达式
  • ¥15 VS2022 C++的相关代码问题咨询
  • ¥15 如果要做一个老年人平板有哪些需求
  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥30 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答