我在使用以下代码
时仅出现内存不足错误 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,并且在我的所有活动中都是相同的位图' s(10)
当快速连续地从一个活动切换到另一个活动时,往往会发生这种情况。
如何提高效率?
感谢任何帮助
标记
答案 0 :(得分:0)
您的位图最有可能有多大并不重要。当你得到一个OOM意味着整个系统内存不足。举个例子,如果你有一个10MB的堆并且我分配9.999 MB然后分配100个字节,那么100个字节将抛出异常(因为那是它实际上没有内存的时候)。真正的问题是第一次分配。
使用System.gc是一个可怕的黑客攻击,实际上并没有解决你的问题 - 它只是让你最好再看到它。你有内存泄漏。你需要修复这个内存泄漏,如果不是现在最终。泄漏几乎肯定是对Activity对象的泄漏引用。回到你的应用程序,运行一些堆分析器,找出泄漏的位置。