Тествам приложението на моя телефон (размер 720x1280). Приложението работи добре, когато използвам размера на извадката от 2. Когато се опитах да използвам размер на извадката от 1, приложението се срива в линията, където рисувам изображението (код, споменат по-долу). Моля, насочете ме, където кодът ми се нуждае от корекция.
canvas.drawBitmap(backgoundImage, 0, 0 , null);
код
public Bitmap getAssetImage(Context context, String filename) throws IOException {
AssetManager assets = getApplicationContext().getResources().getAssets();
InputStream buffer = null;
try {
buffer = new BufferedInputStream((assets.open("drawable/" + filename + ".png")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
if (tabletSize) {
Log.i("DragDrop", "am tablet");
} else {
Log.i("DragDrop", "am phone");
options.inSampleSize = 1;
}
Bitmap temp = BitmapFactory.decodeStream(buffer, null, options);
Bitmap finalImage = Bitmap.createScaledBitmap(temp, (int) dWidth, (int) dHeight, true);
temp.recycle();
temp=null;
return finalImage;
}
LogCat
07-07 12:28:14.150: E/AndroidRuntime(7256): FATAL EXCEPTION: Thread-748
07-07 12:28:14.150: E/AndroidRuntime(7256): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@416ec9f0
07-07 12:28:14.150: E/AndroidRuntime(7256): at android.graphics.Canvas.throwIfRecycled(Canvas.java:1026)
07-07 12:28:14.150: E/AndroidRuntime(7256): at android.graphics.Canvas.drawBitmap(Canvas.java:1065)
07-07 12:28:14.150: E/AndroidRuntime(7256): at com.example.funandlearn.DragDrop$MyBringBackSurface.run(DragDrop.java:640)
07-07 12:28:14.150: E/AndroidRuntime(7256): at java.lang.Thread.run(Thread.java:856)
За вашата референтна линия № 640 има код
canvas.drawBitmap(backgoundImage, 0, 0 , null);
Отговори:
1 за отговор № 1Вие имате това
Bitmap temp = BitmapFactory.decodeStream(buffer, null, options);
Bitmap finalImage = Bitmap.createScaledBitmap(temp, (int) dWidth, (int) dHeight, true);
temp.recycle();
temp=null;
Вашият logcat казва
Canvas: trying to use a recycled bitmap
Трябва да рециклирате растерна карта, когато не се използва.
Цитиране от документите
На Android 2.3.3 (API ниво 10) и по-ниски, се препоръчва използването на рециклиране ().
Трябва да използвате recycle()
само когато сте сигурни, че растерната карта вече не се използва. Ако се обадите на recycle () и по-късно се опитате да нарисувате растерната карта, ще получите грешката: "Canvas: опитвате се да използвате рециклирана растерна карта".
Управление на паметта на Android 3.0 и по-висока
Android 3.0 (API ниво 11) представя BitmapFactory.Options.inBitmap област. Ако тази опция е зададена, методите за декодиране, които вземат обекта Опции, ще се опитат да използват повторно съществуваща растерна карта при зареждане на съдържание, Няма нужда да се използва recycle
.
Също така проверете това
http://developer.android.com/training/displaying-bitmaps/manage-memory.html