JAVA多线程

来源:互联网 发布:vb.net数据库放到内存 编辑:程序博客网 时间:2024/06/05 21:49

创建方法:

1,扩展Thread类。

2,实现Runnable接口,需要创建Thread类并把实现此接口的对象做为参数传递进去才可以进去启动。

Runnable方法创建SurfaceView

 

package com.gaara.test;

import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MyView extends SurfaceView implements Callback,Runnable {
   
    private Thread th = new Thread(this);
    private Paint paint ;  
    private SurfaceHolder sfh;
    private Canvas canvas;
   
    public MyView(Context context) {  
        super(context);  
       
        sfh = this.getHolder();
        sfh.addCallback(this);
        paint = new Paint();  
        paint.setAntiAlias(true);//设置画笔无锯齿(如果不设置可以看到效果很差)  
        this.setKeepScreenOn(true);//设置背景常亮  
    
    }  

    @Override
    public void run() {
        try {    
            canvas = sfh.lockCanvas(); // 得到一个canvas实例    
            canvas.drawColor(Color.WHITE);// 刷屏    
            canvas.drawText("Himi", 100, 100, paint);// 画文字文本    
            canvas.drawText("这就是简单的一个游戏框架", 100, 130, paint);    
        } catch (Exception ex) {    
        } finally { // 备注3    
            if (canvas != null)    
                sfh.unlockCanvasAndPost(canvas);  // 将画好的画布提交    
        }
    }
   
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        th.start();
    }
   
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub
       
    }

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

 

多线程中创建一个循环,使用前面获取到的SurfaceHolder对象调用sfh.lockCanvas()取得Canvas,

SurfaceHolder手册中的描述是,持有一个显示层的抽象接口,

lockCanvas方法有两种,一种返回一个指定的脏矩形区域,效率比较高,另一种返回整个区域。

需要在创建完成之后才可以调用,否则返回的是null,编辑位图在unlockCanvas() 和 lockCanvas()之间操作,未解锁之前位图不会进行渲染。

原创粉丝点击