私は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()をパスごとに複数回実行します。
OSに問題がありますか(「faulty」デバイスはどちらも6.xにあります)ですか?
ご協力いただきありがとうございます。
私は専門家ではありませんが、メモリに関連する原因かもしれません。すべての変更は、通常、大量のメモリを必要とする新しいビットマップを作成しています。 –
スレッドがビットマップの同じ部分で動作しないように見えるので、複数のコピーを必要としないかもしれません。 –
私は各スレッドにソースビットマップのほんの一部を提供します。しかし、私はこの想像上のメモリ問題をWiko Darkmoonで苦しんでいませんか? – Xalamadrax