2017-08-22 15 views
1

J'ai créé un écran de démarrage, puis j'ai commencé l'activité comme d'habitude.Optimiser la mémoire de l'écran de démarrage

mais j'ai remarqué que l'utilisation de la mémoire a beaucoup augmenté même si j'ai terminé l'activité et une grande différence dans l'utilisation de la mémoire entre le splash avec un arrière-plan et celui sans arrière-plan.

Une solution pour cela?

une capture de la mémoire lorsque splash n'a pas d'image de fond

enter image description here

une capture de la mémoire lorsque splash a une image d'arrière-plan

enter image description here

le code pour le démarrage activité

public class SplashActivity extends AppCompatActivity { 

    /** 
    * To get ride of the activity reference to avoid memory leaks 
    */ 
    private static WeakReference<SplashActivity> mActivity; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_splash); 

     mActivity = new WeakReference<>(this); 

     //delay for 2 seconds and start the home activity 
     Completable.complete() 
       .delay(2, TimeUnit.SECONDS) 
       .doOnComplete(this::startHomeActivity) 
       .subscribe(); 
    } 

    private void startHomeActivity() { 
     if (mActivity.get() != null) { 
      Activity activity = mActivity.get(); 
      Intent homeIntent = new Intent(activity, HomeActivity.class); 
      startActivity(homeIntent); 
      activity.finish(); 
     } 
    } 
} 

et définir le thème au manifeste

<style name="splashScreenTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:windowBackground">@drawable/zamen_splash</item> 
    <item name="colorPrimaryDark">@color/splash_color_dark</item> 
</style> 
+0

Qu'en est-il de la création avec fragment. beaucoup plus léger –

+0

Utilisez-vous une image comme arrière-plan pour cette activité? "zamen_splash" pouvez-vous me dire la résolution de ce dessinable? –

+0

La taille de l'image? –

Répondre

3

Vous devez mettre votre drawable dans le dossier spécifique pour la résolution de votre image est utilisée pour.

Vous avez dit que l'image est 1920 * 1080. Donc, il semble que la résolution est pour xxx-hdpi. Si vous placez cette image dans ce dossier spécifique, vous dites à l'opérateur de réseau quelle devrait être la résolution du téléphone afin qu'il puisse utiliser cette image. Dans ce cas, xxx-hdpi est pour 4x dpi. Cette link vous donnera plus d'informations. Puis Android va ajuster cela à d'autres résolutions et vous sauver de la gâchis de la mémoire. Vous pouvez ajouter une image spécifique pour ces résolutions dans les autres dossiers (hdpi, xhdpi, xxhdpi) et éviter le SO pour faire le travail supplémentaire.

À l'intérieur de ce link vous aurez des informations pour différents appareils.

Comme beaucoup d'utilisateurs l'ont dit: il n'y a pas besoin d'utiliser weakrefrence.