123钱钱钱 2016-01-14 08:28 采纳率: 0%
浏览 1556

安卓 surfaceview 为什么最初几个循环会延迟

如果我把线程的sleep时间改成1000,就会出现卡屏的现象。大概要卡10秒左右
package com.example.myadd;

import java.util.Random;

import com.example.myob.Soldier;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;

public class MyView extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder Myholder = null;
myThread mt;

public MyView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
    Myholder = this.getHolder();
    Myholder.addCallback(this);
    mt = new myThread(Myholder);
}

// @Override
// protected void onDraw(Canvas canvas) {
// // TODO Auto-generated method stub
// Soldier soldier = new Soldier();
// soldier.setLeave(2);
// soldier.setLocal(290, 290);
// soldier.doDraw(canvas);
// System.out.println(soldier.getLocal_x());
// super.onDraw(canvas);
// //soldier.run();
// //System.out.println(soldier.getLocal_x());
// //super.onDraw(canvas);
// }
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    mt.start();

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub

}

class myThread extends Thread {

    private SurfaceHolder holder;
    Soldier soldier = new Soldier();
    Canvas canvas = null;

    public myThread(SurfaceHolder holder) {
        // TODO Auto-generated constructor stub
        this.holder = holder;
    }

    /*
     * public void run() { int count = 0; while (true) { Canvas c = null;
     * try { synchronized (holder) { c = holder.lockCanvas(null);//
     * 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
     * c.drawColor(Color.BLACK);// 设置画布背景颜色 Paint p = new Paint(); // 创建画笔
     * p.setColor(Color.WHITE); Rect r = new Rect(100, 50, 300, 250);
     * c.drawRect(r, p); c.drawText("这是第" + (count++) + "秒", 100, 310, p);
     * Thread.sleep(1000);// 睡眠时间为1秒
     * 
     * // TODO Auto-generated method stub soldier.setLocal(290, 290);
     * soldier.setLeave(2); float i,j,k,l ; i = j = k = l = 300; while
     * (true) { try { canvas = null; synchronized (holder) { canvas =
     * holder.lockCanvas(); System.out.println("32");
     * 
     * //soldier.doDraw(canvas);
     * 
     * //soldier.move(); Paint p = new Paint(); p.setColor(Color.RED);
     * canvas.drawCircle(i+=10, j+=10, 15, p); } } catch (Exception e) { //
     * TODO: handle exception e.printStackTrace(); } finally { if (c !=
     * null) { holder.unlockCanvasAndPost(c);// 结束锁定画图,并提交改变。
     * 
     * } } } }
     */
    @Override
    public void run() {
        // TODO Auto-generated method stub
        soldier.setLocal(290, 290);
        soldier.setLeave(2);
        float i, j, k, l;
        i = j = k = l = 300;
        while (true) {
            try {
                canvas = null;
                synchronized (holder) {
                    canvas = holder.lockCanvas();
                    System.out.println("32");

                    // soldier.doDraw(canvas);

                    // soldier.move();
                    Paint p = new Paint();
                    p.setColor(Color.RED);
                    canvas.drawCircle(i += 10, j += 10, 15, p);
                    Thread.sleep(10);
                }

            } catch (Exception e) {
                // TODO: handle exception
            } finally {
                //
                holder.unlockCanvasAndPost(canvas);
            }
        }

    }
}

}

  • 写回答

1条回答 默认 最新

  • devmiao 2016-01-18 20:41
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?