如何为android中的许多活动预加载资源?

时间:2012-03-21 22:17:20

标签: android performance resources

我有一个包含多个活动和大量图像资源的应用程序。我希望能够在启动画面中加载这些资源。我已经有一个启动画面,目前它只是一个计时器。我已经阅读了有关如何为一个活动预加载的教程,但这意味着在活动之间进行更改时将会进一步加载。 我的应用程序中的主要步骤如下:

启动画面 - >活动1 - >活动2 - >活动3 - >活动4

活动2和3可以返回结果。我想在启动画面中加载我在活动1,2,3,4中需要的所有图像。它应该适合内存,但目前在打开时会导致延迟。

我相信我应该使用单身人士,在我的启动画面中加载它,然后调用启动画面继续进行活动1.

当谷歌搜索时,我找不到具体如何做到这一点。

非常感谢帮助!

由于

2 个答案:

答案 0 :(得分:1)

单例模式非常简单

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

就是这样,为你的资产创建一些getter并像这样检索它们

Singleton.getInstance().getAsset();

答案 1 :(得分:0)

我建议实施内容提供程序或您自己的磁盘缓存机制,而不是使用Singleton方法,原因如下:

  • 使用静态集合意味着您在整个应用程序生命周期中保留所有位图的引用,这会占用更多内存,因为您引用了所有图像,即使用户未与之交互的图像也是如此片刻。
  • 您必须保持静态集合的同步,以避免读/写交错。 - 如果您的应用程序被系统杀死以回收内存,并且用户恢复与应用程序交互,则您的静态集合可能会重新初始化,因此它将为空,您需要加载对位图的引用再次。这会增加应用程序的复杂性并引入潜在的错误。