【问题标题】:Textureview.getBitmap() making Main Ui thread sluggishTextureview.getBitmap() 使主 UI 线程缓慢
【发布时间】:2014-08-29 22:02:32
【问题描述】:

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

            }
        };

【问题讨论】:

    标签: java android multithreading android-camera textureview


    【解决方案1】:

    bmps.compress 方法将其结果写入您的输出 ByteArrayOutputStream,它不会更改原始位图。所以,首先,你没有使用 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 方法中压缩位图,您的问题将得到解决。

    【讨论】:

    • Lemos 你能添加一个例子吗。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2017-04-08
    • 1970-01-01
    相关资源
    最近更新 更多