<黄逗逗> 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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来