2017-08-22 55 views
1

我做了一個啓動屏幕,然後照常開始活動。優化啓動屏幕內存

但我注意到內存使用增加了很多,即使我完成了活動,並且在背景與沒有背景的背景之間的內存使用有很大差異。

任何解決方案?

存儲器的捕獲時飛濺沒有背景圖像

enter image description here

存儲器的捕獲時飛濺具有背景圖像

enter image description here

閃現活性的代碼

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(); 
     } 
    } 
} 

,並設置在清單

<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

怎麼樣創建片段。它要輕得多 –

+0

您是否將任何圖像用作該活動的背景? 「zamen_splash」你能告訴我那個drawable的解析嗎? –

+0

圖像的大小? –

回答

3

主題你應該把你繪製的特定文件夾內的圖像被用於解析。

你說圖像是1920 * 1080。所以它的分辨率似乎是xxx-hdpi。如果您將該圖像放入該特定文件夾中,則您正在告訴SO該手機的分辨率應該如何才能使用該圖像。在這種情況下,xxx-hdpi用於4x dpi。 這link會給你更多的信息。

然後Android會調整到其他分辨率,並避免內存浪費。您可以爲其他文件夾(hdpi,xhdpi,xxhdpi)中的這些分辨率添加特定圖像,並避免SO執行額外的工作。

在這個link裏面您將獲得不同設備的信息。

正如許多用戶所說:沒有必要使用weakrefrence。