하나의 활동이 웹 뷰 (이미지가있는 sdcard의 html 파일 사용), imageviews, scroll과 같은 단일 레이아웃에서 부풀려진 매우 복잡한 코드 인 앱에서 작업하고 있습니다.이 활동을 시작하려면 이러한 오류가 발생합니다.android 응용 프로그램에서 활동을 시작하는 중 메모리 부족 오류가 발생합니까?
E/AndroidRuntime(600): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime(600): at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime(600): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
E/AndroidRuntime(600): at android.view.LayoutInflater.createView(LayoutInflater.java:586)
E/AndroidRuntime(600): ... 29 more
E/AndroidRuntime(600): Caused by: java.lang.OutOfMemoryError
E/AndroidRuntime(600): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(600): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:483)
E/AndroidRuntime(600): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:351)
E/AndroidRuntime(600): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
E/AndroidRuntime(600): at android.content.res.Resources.loadDrawable(Resources.java:1935)
E/AndroidRuntime(600): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
E/AndroidRuntime(600): at android.view.View.<init>(View.java:2785)
E/AndroidRuntime(600): at android.view.View.<init>(View.java:2722)
E/AndroidRuntime(600): at android.view.ViewGroup.<init>(ViewGroup.java:379)
E/AndroidRuntime(600): at android.widget.RelativeLayout.<init>(RelativeLayout.java:174)
E/AndroidRuntime(600): ... 32 more
이 문제를 해결하는 방법이 코드를 시도했지만 여전히 무엇을 해야할지 모릅니다.
@Override
protected void onDestroy() {
super.onDestroy();
unbindDrawables(findViewById(R.id.rootView));
System.gc();
}
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
이 문제를 해결할 수있는 방법은 무엇입니까? onPause
에서
((BitmapDrawable) myImageView.getDrawable()).getBitmap().recycle();
myImageView = null;
사용도 코드 : 귀하의 경우 비트 맵 메모리 사용을 최적화 할 수
활동이 실행될 때마다 사용되는 이미지의 수가 가변적 일 때 어떻게 사용합니까? – Navdroid
이미지를 설정할 때 각 이미지의 속성을 변경하려면이 옵션을 사용하십시오. 또는 파일을 응용 프로그램 파일 시스템에 저장하는 동안이 옵션을 사용할 수도 있습니다. –