我正在研究android中的繪畫應用程序。 目前我正在處理撤銷功能 - 我的想法是存儲更改的像素的座標和顏色。Android內存異常存儲大量的字節
我正在處理性能問題的RGB - 因此它們存儲在一個字節數組中。
currentRGBPixelArray是包含舊ARGB值的數組。 updatedRGBPixelArray是包含新ARGB值的數組。
如果總是3個字段中的值不同,我知道我必須存儲這些值。這是在Integer,Byte []對上完成的,其中Integer是RGBPixelArray中像素的索引。
但是,使用此代碼時,當存儲大量數據時(例如,如果背景或像1920 * 1080的屏幕那樣的巨大區域被改變,可能多次),我會發生內存不足異常。
這裏是我的代碼:
List<Pair<Integer, Byte[]>> changeTupelHolder = new ArrayList<>();
for (int index = 0; index < width; index += 4)
{
if (currentRGBPixelArray[index] != updatedRGBPixelArray[index] ||
currentRGBPixelArray[index+1] != updatedRGBPixelArray[index+1] ||
currentRGBPixelArray[index+2] != updatedRGBPixelArray[index+2])
{
Pair<Integer, Byte[]> changeTupel =
new Pair<>(index,
new Byte[]{currentRGBPixelArray[index],
currentRGBPixelArray[index+1],
currentRGBPixelArray[index+2]});
changeTupelHolder.add(changeTupel);
}
}
然後changeTupelHolder再次存儲在堆棧和撤消時,被稱爲彈出。
如何處理內存不足異常? 存儲changeTupelHolder是一個好主意(性能?)? 如果是這樣,當應用程序傾向於內存不足時該如何做?
或者你對我的問題有一個完全不同的想法?
感謝您的幫助!
你能解釋更多的在什麼時候,你應該存儲的變化?什麼情況會觸發你的代碼? 另外,你可以使用類似SVG的東西嗎? – Mussa
這只是一個簡單的繪畫活動 - 如果我畫一個圓形,填充一個區域或任何我想存儲舊像素。 – Agyss
如果它只是一個簡單的繪畫活動,那麼你應該能夠使用矢量並將它們作爲路徑存儲在堆棧中。 – Mussa