Wysoka rozdzielczość obrazu - OutOfMemoryError
Opracowuję aplikację na Galaxy S4. Jednym z wymagań aplikacji jest posiadanie ekranu SplashScreen zawierającego obraz1920 x 1080 pikseli. Jest to wysokiej jakości obraz w formacie .jpeg i rozmiar obrazu2 megabajty.
Problem polega na tym, że dostajęBłąd brak pamięci jak tylko uruchomię aplikację. Jestem zdumiony, że dzieje się tak już z obrazem o rozmiarze zaledwie 2 megabajtów?Jak mogę rozwiązać ten problem i wyświetlić obraz?
Zmiana wymiarów lub rozmiaru obrazu nie jest opcją.
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();
}
}
I 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"/>
DODATKOWE INFORMACJE:
Czasami (gdy dostępna jest duża ilość pamięci urządzenia) aplikacja może przejść przez ekran powitalny, ale potem,zużycie pamięci przez aplikację jest po prostu szalone. (około 100 megabajtów). Chociaż zamykam SplashScreen Activity i kończę (), wydaje się, że takodniesienie do ImageView / obrazu przechowywanego w pamięci.
Jak mogę zmniejszyć ogromne zużycie pamięci?
Gdy nie wyświetla się ekranu powitalnego, moja aplikacja zużywa tylko około 35 MB pamięci. Z obrazem SplashScreen, jego około 100 MB.