android - Android 上的多线程问题

标签 android multithreading algorithm image-processing android-bitmap

我正在 Android 上进行多线程图像处理,但我遇到了一个我无法澄清的问题。

在一些手机上,甚至是旧手机上,我得到了一些不错的计时,而在较新的手机上,我得到了一些 Not Acceptable 计时。

enter image description here

一些代码:

public class ShiftEffectManager implements ShiftRunnable.OnShiftRunCompleteListener {

    ...

    public ShiftEffectManager(OnEffectAppliedListener listener, Bitmap source) {
        mService = Executors.newFixedThreadPool(MAX_THREADS);

        ...
    }

    public void execute() {

        ...

        for (int i = 0; i < MAX_THREADS; i++) {
            mService.submit(new ShiftRunnable(this, getFraction(mSource, start, step), start, offsets));
        }
    }

    private Bitmap getFraction(Bitmap source, int start, int step) {
        return Bitmap.createBitmap(source, 0, start, source.getWidth(), step);
    }

    @UiThread
    private void assembleBitmap() {
        ...
        ((Activity) mListener).runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mListener.onEffectApplied(output);
            }
        });
    }

    @Override
    public void onShiftRunComplete(ShiftFractionPayload payload) {
        mPayloads.add(payload);
        mTaskCount++;

        if (mTaskCount == MAX_THREADS) {
            assembleBitmap();
        }
    }
}

ShiftRunnable 正在解析 1920 * (1080/MAX_THREADS) 并在给定偏移量上移动红色和蓝色 channel 。因此,每次通过多次 getPixels() 和 setPixels()。

这是一个设备相关的问题,一个操作系统问题(因为两个“故障”设备都在 6.x 中)?

感谢任何帮助,谢谢。

最佳答案

毕竟这不是多线程问题...

每次传递多次调用 getPixel(x, y) 和 setPixel(x, y) 会减慢执行速度。 但是,出于未知原因,在后期 Marshmallow 设备/模拟器上情况更糟。

int[width * height] 数组中使用 getPixels()/setPixels() 现在效率大大提高。 我们现在说的是毫秒,而不是秒。

关于android - Android 上的多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42441530/

相关文章:

android - 使用基于类别的分段标题实现 RecyclerView

android - FireBase Firestore 按 ID 列表检索多个文档

android - 在 Activity 之间切换(通知面板 - 样式)

java - 问 : How to use OnClickListener with HorizontalScrollView

winforms - 线程列表框C#SharpDevelop

java线程如何实现并发

c - 对多组求和

java - 减少 Java 的操作时间

android - 如何编写算法来查看目录是否包含 jpg 文件(子文件夹)

求解矩阵的算法