这更像是一个设计问题。我有MasterActivity
显示的图片预览不是很少,而DetailActivity
则应该以全屏显示图片。
使用parse.com
服务从服务器检索图片,并将其分配给ParseImageView
,即view.setParseFile(file); view.loadInBackground()
。平均大小约为。 800x1000px
:因此图片在主活动中缩小,细节更大。在这两种情况下,我都会在后端引用相同的800x1000px
文件。下载大约需要2秒。我不想存储较小的尺寸。
当用户点击按钮时,我需要将此位图(ParseFile,objectId等)传递给DetailActivity
,如果它已加载到MasterActivity
。
问题:活页夹交易失败
Intent i = new Intent(this, DetailActivity.class);
Bitmap b = ((BitmapDrawable) picture.getDrawable()).getBitmap();
i.putExtra("bitmap", b);
startActivity(i);
无法工作,获得Binder Transaction Failed!
。在SO(example)上有详细记载,你不能传递大于1MB(或多或少)的对象。
问题:活页夹交易失败
ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
i.putExtra("bitmap", bytes);
正如其他地方所建议的,我试图压缩位图,但我得到了相同的大小错误。为了避免交易限制,我应该将质量降低到50左右,结果不好看。
问题:OutOfMemoryError
这是一个很有前途的选择,但没有工作,抛出OOM。我的调试意见是:
MasterActivity
; DetailActivity
,而主人仍在后台; 我已经陷入困境。我能做什么?如果两个活动可以共享相同的Bitmap实例,我可以避免OOM。