我正在为Galaxy S4开发一个应用程序。 应用程序的要求之一是具有启动屏幕,其中包含一个1920x1080像素的图像。这是一张高质量的.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 活动并且使用 finish() 结束它,似乎仍然 有一个对 ImageView/图像的引用保存在内存中。
如何减少大量的内存消耗?
如果我不显示闪屏界面,我的应用程序只消耗约35MB的内存。但是使用闪屏图片后就达到了约100MB。