我正在尝试降低我的应用程序的内存使用量,我注意到它的大部分是由活动的背景引起的:在XHDPI中,720 * 1280 * 4 =每个3.6Mbytes,Android似乎没有将它们释放为他们不再使用了.
有没有办法告诉Android加载某些资源图像为RGB 565而不是RGB 8888,以便在没有alpha通道的情况下为那些较大的图像保存一些内存?
我知道这可以通过编程方式完成,但我想知道是否也可以使用活动布局中使用的图像和背景或使用setBackgroundResource()来完成.
解决方法
你可以这样做:
protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.high_scores); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inPreferredConfig = Config.RGB_565; BitmapDrawable highscoresBg = BitmapFactory.decodeResource(getResources(),R.drawable.achievements,opts); findViewById(R.id.high_scores_root).setBackgroundDrawable(highscoresBg);
使用ARGB_8888时,图像的像素将存储在2个字节上,而不是4个字节. 50%节省了内存,但质量较差.
这个article告诉我们在Android< 2.3图像默认为RGB_565.但是,如果图像具有Alpha通道(例如PNG),则它将加载到ARGB_8888中.在Android> = 2.3上默认情况下,所有图像都加载到ARGB_8888中.