在子线程里面高刷调用canvas.drawPixelMapHolderRect;画图,然后模拟机闪退,请请帮帮忙怎么弄?

@Override
    public void run() {
        isFirstRun = true;
        init();
        while (isRunning) {
            //游戏暂停
//            if (!isPause()) {
//                myLogic();
//            }
            long startTime = System.currentTimeMillis();
            myDraw();
            long endTime = System.currentTimeMillis();
            long time = endTime - startTime;
            if (time < 1000/35) {
                try {
                    Thread.sleep(1000/35 - time);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            //刷新UI
            TaskDispatcher uiTaskDispatcher = context.getUITaskDispatcher();
            uiTaskDispatcher.asyncDispatch(() -> this.invalidate());
        }
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

myDraw

  //画出游戏界面
    private void myDraw() {
        try {
            tiledLayer_cover.draw(lockCanvas);
            tiledLayer_peng01.draw(lockCanvas);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (lockCanvas != null){
//                holder.unlockCanvasAndPost(lockCanvas);
            }

        }
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

draw

public void draw(Canvas canvas) {
        for (int i = 0; i < getRows(); i++) {
            for (int j = 0; j < getCols(); j++) {
                int tiledIndex = getTiledCell(j,i);
                if (tiledIndex == 0) {
                    continue;
                }
                int x = mTiledX[tiledIndex];
                int y = mTiledY[tiledIndex];
                int ix = getX() + j * getWidth();
                int iy = getY() + i * getHeight();
                mSrc = new RectFloat(x, y, x + getWidth(), y + getHeight());
                mDest = new RectFloat(ix,iy , ix+getWidth(), iy + getHeight());
                canvas.drawPixelMapHolderRect(mBitmap,mSrc,mDest,paint);
            }
        }
    }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
鸿蒙
线程
画图
2022-03-03 16:30:03
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Sidneyen
2

APP闪,你可以先把run()方法里面的myDraw()先注释掉,真机调试重启,如果仍出现APP闪退,则说明你的run()方法的代码有问题。  如果注释掉myDraw()方法没有出现APP的闪退,那下一步就要查看myDraw()方法中的代码。

分享
微博
QQ
微信
回复
2022-03-04 09:02:02
相关问题
HarmonyOS 手势处理概率退
693浏览 • 1回复 待解决
Text实现scroll效果怎么弄
6588浏览 • 1回复 待解决
想把APK文件转成HAP怎么弄
8504浏览 • 2回复 待解决
HarmonyOS canvas画图问题
633浏览 • 1回复 待解决
HarmonyOS 主线程耗时任务,app退
894浏览 • 1回复 待解决
ability被异常杀后数据保留怎么弄
5796浏览 • 1回复 待解决
Mysql 同时修改多个库的数据怎么弄
3297浏览 • 1回复 待解决
HarmonyOS NEXT Developer Beta1模拟退
2733浏览 • 1回复 待解决
HarmonyOS C++ 调用 ets 层函数报错退
992浏览 • 1回复 待解决