1
我正在Android上進行多線程圖像處理,並且遇到了無法解釋的問題。Android上的多線程問題
在某些手機上,即使是舊手機,我也會得到一些體面的時間和更多的時間,這些都是不可接受的。
某些代碼:
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的)和移上的給定偏移量紅色和藍色通道。因此,getPixels()和setPixels()每次傳遞幾次。
它是一個設備相關的問題,操作系統之一(因爲'錯誤'設備都在6.x)?
任何幫助表示讚賞,謝謝。
我不是專家,但可能是內存相關的原因。每創建一個新的位圖,通常需要大量的內存。 –
也看起來像線程不會在位圖的相同部分上運行,所以也許你不需要它的多個副本? –
我爲每個線程提供一小部分源位圖。但是我不會因爲這個Wiko Darkmoon的記憶問題而受苦嗎? – Xalamadrax