【发布时间】:2013-08-25 11:22:34
【问题描述】:
我正在为 Galaxy S4 开发一个应用程序。 应用程序的要求之一是拥有一个包含 1920x1080 像素的图像的 SplashScreen。它是一个高质量的 .jpeg 图像,图像大小约为 2 兆字节。
问题是我一启动应用程序就会收到 OutOfMemoryError。我很震惊,这已经发生在只有 2 兆字节大小的图像上? 如何解决此问题并显示图像?
不能更改图像的尺寸或大小。
SplashScreen.java
public class Splashscreen extends Activity {
private static final int SPLASH_DURATION = 2000;
private boolean isBackPressed = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen);
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
// check if the backbutton has been pressed within the splash_duration
if(!isBackPressed) {
Intent i = new Intent(Splashscreen.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Splashscreen.this.startActivity(i);
overridePendingTransition(R.anim.short_fade_in, R.anim.short_fade_out);
}
finish();
}
}, SPLASH_DURATION);
}
@Override
public void onBackPressed() {
isBackPressed = true;
super.onBackPressed();
}
}
还有splashscreen.xml
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ivSplashScreenImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/high_res_splashscreen_image"/>
其他信息:
有时,(当有大量设备内存可用时)应用能够通过启动屏幕,但随后,应用的内存消耗简直是疯狂。 (大约 100 兆字节)。即使我关闭 SplashScreen Activity 并完成()它,似乎 对 ImageView / Image 的引用保存在内存中。
如何减少巨大的内存消耗?
当我不显示启动画面时,我的应用只消耗大约 35MB 的记忆。使用 SplashScreen 图像,其大小约为 100MB。
【问题讨论】:
-
你的 res 文件夹里是不是有很多图片文件??
-
是的,我有大约 40 个图像文件。但它们不是很大(大多数只是图标),大小在 10 到 50kb 之间。
标签: android image bitmap android-imageview out-of-memory