我正在为 Galaxy S4 开发一个应用程序。该应用程序的要求之一是拥有一个包含1920x1080像素图像的 SplashScreen。它是一个高质量的 .jpeg 图像,图像的大小约为2 兆字节。
问题是我一启动应用程序就会收到OutOfMemoryError 。我很震惊,这已经发生在只有 2 兆字节大小的图像上?如何解决此问题并显示图像?
更改图像的尺寸或大小不是一种选择。
闪屏.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。