2012-03-21 56 views
0

我有一個應用程序與幾個活動和大量的圖像資源。我希望能夠在啓動畫面中加載這些資源。我已經有了一個啓動畫面,目前只有一個計時器。我已閱讀關於如何預加載ONE活動的教程,但這意味着在活動之間進行更改時會有進一步的加載。 在我的應用的主要步驟是這樣的:如何爲Android中的許多活動預加載資源?

閃屏 - >活性1 - >活性2 - >活性3 - >活動4

活動2和3可以返回結果返回。我想在啓動畫面中加載我在活動1,2,3,4中需要的所有圖像。它應該很好地適應內存,但是當打開時會導致延遲。

我相信我應該使用單這一點,我閃屏時,加載它,然後打電話到閃屏上移動到活動1.

在谷歌上搜索,雖然,我不能找到太多的到底如何做到這一點。

非常感謝幫助!

感謝

+0

你看過[AsyncTask](http://developer.android.com/reference/android/os/AsyncTask.html)嗎? – adneal 2012-03-21 22:28:00

+0

是的,我已經研究了一下Async Task和處理程序,我可以使用它來加載資源,同時顯示啓動畫面。它只是知道如何創建一個單例(如果我需要它),以及如何加載和存儲圖像以便能夠從其他活動中獲取它們。 – ThePerson 2012-03-21 23:01:48

回答

1

Singleton模式是非常簡單的

public class Singleton{ 

    //variables 
    private Bitmap asset; 
    //getter method for asset 
    public Bitmap getAsset(){ 
     return asset; 
    } 

    //Singleton Instance 
    private static Singleton instance = null; 

    //a private constructor 
    private Singleton(){} 

    //To get the singleton instance 
    public static Singleton getInstance(){ 
     if(singleton == null){ 
      instance = new Singleton(); 
     } 
     return instance; 
    } 

    //some way of asynchronously loading assets - threads or AsyncTask 
    public void loadAssets(){ 
     //do something to load assets asynchronously 
    } 
} 

要使用它只是

Singleton.getInstance().loadAssets(); 

,這就是它,創造一些干將爲您的資產和檢索它們像這樣

Singleton.getInstance().getAsset(); 
+0

這看起來像我想要的。謝謝! – ThePerson 2012-03-21 23:52:26

+0

+1,確保singleton正常工作的小更新:public synchronized Singleton getInstance() – NguyenDat 2012-03-22 01:30:00

+0

getInstance方法應該是靜態的嗎? public static synchronized Singleton getInstance()? 如果不是,我收到一個錯誤,說它應該是... 謝謝 – ThePerson 2012-03-24 21:45:38

0

我建議實施一個內容提供商,還是你自己的磁盤緩存機制,而不是使用這些原因,辛格爾頓的做法:

  • 使用靜態集合意味着你在整個應用過程中保持對所有的位圖的參考生命週期,當你引用所有的圖像時,這佔用更多的內存,即使那些用戶暫時沒有與之交互。
  • 您必須保持靜態收集的同步以避免讀/寫交錯。 - 如果您的應用程序被系統殺死以回收內存,並且用戶繼續與應用程序進行交互,那麼您的靜態收集將有可能重新初始化,因此它將是空的,您需要將引用加載到您的再次位圖。這增加了您的應用程序的複雜性並引入了潛在的錯誤。