Textureview.getBitmap()使Main Ui线程变得迟缓

时间:2014-08-29 22:02:32

标签: java android multithreading android-camera textureview

使用Textureview.getBitmap()每秒从相机预览中抓取帧。 它完美地工作,除了它导致主Ui线程缓慢,有时甚至崩溃。 请问我需要做什么??谢谢

这是我的代码:

       mCountDownTimer=new CountDownTimer(7000,500) {

            @Override
            public void onTick(long millisUntilFinished) {
                Log.v("Log_tag", "Tick of Progress"+ i+ millisUntilFinished);
                i++;
                mProgressBar.setProgress(i);
               Bitmap bmps = mTextureView.getBitmap();
               ByteArrayOutputStream out = new ByteArrayOutputStream();
               bmps.compress(Bitmap.CompressFormat.JPEG , 0, out);
               rev.add(bmps);
            }

            @Override
            public void onFinish() {
            //Do what you want 
                i++;
                mProgressBar.setProgress(i);
                mCountDownTimer.cancel();

            }
        };

1 个答案:

答案 0 :(得分:1)

bmps.compress方法将其结果写入out ByArrayOutputStream,并且它不会更改原始位图。所以,首先,你没有使用compress方法的结果,因为在bmps.compress调用之后你没有使用'out'变量。

我认为删除这两行:

ByteArrayOutputStream out = new ByteArrayOutputStream(); bmps.compress(Bitmap.CompressFormat.JPEG,0,out);

会产生与您现在相同的结果。

但除此之外,最好不要在UI线程上进行处理(如图像处理),这肯定会减慢应用程序的速度。解决这个问题的最简单方法是使用AsyncTask:

http://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask Android example

尝试压缩AsyncTask的doInBackground方法中的位图,你的问题就会解决。