【发布时间】:2023-03-27 02:55:01
【问题描述】:
我只是在使用以下代码时偶尔出现内存不足错误
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// CODE FOR PUTTING BITMAP ON BACKGROUND
String pathName = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()
+ "/Backgrounds/0.png";
Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeFile(pathName);
BitmapDrawable bd = new BitmapDrawable(res, bitmap);
View view = findViewById(R.id.screen1);
view.setBackgroundDrawable(bd);
}
位图只有 310k 和我所有活动 (10) 上的相同位图
当从一项活动快速连续切换到另一项活动时,往往会发生这种情况。
任何想法如何提高效率?
感谢任何帮助
标记
【问题讨论】:
-
bitmap is only 310k。你的意思是'png文件只有310KB'!?位图将占用更多内存。 -
310kb 是您的 png 图像的 压缩 大小。当它被加载到内存中时,它被称为 in memory 大小并且可能不同(通常更多)。导致 OOM 的原因是位图的 in memory 大小。您应该检查您尝试分配多少内存。建议:使用安卓图片加载库。
-
您可以添加“System.gc();”命令强制 android 垃圾收集器清除内存。
-
缩小 png。它的分辨率是多少?为什么不直接分配位图?为什么需要转换为 Drawable?
-
对不起,当我说位图时我的无知我类 png,jpg 作为位图我的意思是图片图片的分辨率为 1280 x 800 与我的平板电脑大小相同文件大小为 310k 我试图设置它作为背景,但图片需要在 sd 卡上才能更改。
标签: android memory memory-management bitmap