Imagem de alta resolução - OutOfMemoryError
Estou desenvolvendo um aplicativo para o Galaxy S4. Um dos requisitos do aplicativo é ter um SplashScreen contendo uma imagem de1920x1080 píxeis. É uma imagem .jpeg de alta qualidade e o tamanho da imagem é sobre2 megabytes.
O problema é que eu estou recebendo umErro de falta de memória assim que eu iniciar o aplicativo. Estou bastante chocado que isso já acontece com uma imagem de apenas 2 megabytes de tamanho?Como posso corrigir esse problema e exibir a imagem?
Alterar as dimensões ou o tamanho da imagem não é uma opção.
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();
}
}
E o 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"/>
INFORMAÇÃO ADICIONAL:
Às vezes, quando há muita memória disponível no dispositivo, o aplicativo consegue passar pela tela inicial, mas,o consumo de memória do aplicativo é simplesmente insano. (cerca de 100 megabytes). Apesar de eu fechar a atividade SplashScreen e terminar (), parece que existeuma referência ao ImageView / Image mantido na memória.
Como posso reduzir o enorme consumo de memória?
Quando não exibo a tela inicial, meu aplicativo consome apenas cerca de 35 MB de memória. Com a imagem do SplashScreen, é cerca de 100MB.