UI线程和bitmap

Bitmap

ByteArrayOutputStream out = new ByteArrayOutputStream();
Bitmap bitmap = Bitmap.createBitmap(this.getWidth(), this.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
this.draw(canvas);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

压缩JPEG格式的图片会比压缩PNG格式的图片快很多

有时当图片太大导致奔溃,可以尝试将图片移动到mipmap目录下,奔溃问题就可以解决

组件移动卡顿

解决方法1:
使用硬件加速

android:hardwareAccelerated="true"

解决方法2:
可以在1的基础上解决

在ondraw时候尽量不要处理太多的事情,比如画圆什么的,移动的尽量是一个固定的图片,比如移动bitmap

解决方法3:
移动的时候不要刷新整个屏幕,而是只刷新移动的区域
** 创建透明bitmap **

//不能使用RGB_565,因为RGB_565没有透明度属性
        source = Bitmap.createBitmap((int) radius * 2+20, (int) radius * 2+20, Bitmap.Config.ARGB_8888);
        target = Bitmap.createBitmap((int) radius * 2+20, (int) radius * 2+20, Bitmap.Config.ARGB_8888); 

以下代码可以进程裁剪操作

 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));

生成的bitmap可能会产生密度大小的不同,所以需要进行调整密度

//重点:这里需要将bitmap的密度重新设置,否则会导致bitmap的尺寸改变
        transparentCircle.setDensity(dm.densityDpi);

Ui操作

设置textColor的选中颜色,需要在selector中设置颜色

<item name="android:textColor">@drawable/templator_type_text_selector</item>

Android UI线程

Android UI线程(主线程)有几个特点:

只能在 UI 线程操作 UI 视图,不能在子线程中操作。
不能在 UI 线程中进行耗时操作,否则会阻塞 UI 线程,引起 ANR、卡顿等问题。

1.可以使用Handler更新UI

Handler mHandler = newHandler(){
    @Override
    publicvoid handleMessage(Message msg){
        if(msg.what == 1){
            textView.setText("Task Done!!");
        }
    }
};
mRunnable = new Runnable() {
    @Override
    publicvoid run() {
        SystemClock.sleep(1000);    // 耗时处理
        mHandler.sendEmptyMessage(1);  
    }
};
private void startTask(){
    new Thread(mRunnable).start();
}

2.AsyncTask
AsyncTask 的实例必须在 UI Thread 中创建。
只能在 UI 线程中调用 AsyncTask 的 execute 方法。
AsyncTask 被重写的四个方法是系统自动调用的,不应手动调用。
每个 AsyncTask 只能被执行一次,多次执行会引发异常。
AsyncTask 的四个方法,只有 doInBackground 方法是运行在其他线程中,其他三个方法都运行在 UI 线程中,也就说其他三个方法都可以进行 UI 的更新操作

** Activity的ui线程 **

activity.runOnUiThread(new Runnable() {
                    public void run() {
                        onPostExecute();
                    }
                });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值