Java getBitmap()使主Ui线程变慢

Java getBitmap()使主Ui线程变慢,java,android,multithreading,android-camera,textureview,Java,Android,Multithreading,Android Camera,Textureview,我正在使用Textureview.getBitmap()每秒从相机预览中抓取帧。 它工作得很好,只是它会导致主Ui线程运行缓慢,有时甚至崩溃。 请问我需要做什么??。谢谢 这是我的密码: mCountDownTimer=new CountDownTimer(7000,500) { @Override public void onTick(long millisUntilFinished) { Log.

我正在使用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();

            }
        };

compress方法正在通过tearrayoutputstream将其结果写入out,并且不会更改原始位图。因此,首先,您没有使用compress方法的结果,因为在bmps.compress调用之后没有使用'out'变量

我认为删除这两条线:

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

将产生与您现在相同的结果

但除此之外,不在UI线程上进行处理(如图像处理)是一种很好的做法,它肯定会减慢应用程序的速度。解决此问题的最简单方法是使用异步任务:


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

Lemos您可以添加一个示例吗。谢谢