Я разрабатываю приложение для Galaxy S4. Одним из требований приложения является наличие SplashScreen, содержащего изображение 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 и завершаю(), кажется, что есть ссылка на ImageView/Image, сохраненную в памяти.
Как уменьшить объем памяти в памяти?
Когда я не показываю заставку, мое приложение потребляет всего около 35 МБ памяти. С изображением SplashScreen - около 100 МБ.