【问题标题】:Best method to load bitmaps in a multi-activity app在多活动应用程序中加载位图的最佳方法
【发布时间】:2014-03-09 04:32:19
【问题描述】:

我正在开发我的第一个安卓游戏,它包含大量的位图。一切都很好,直到我决定在我的应用中添加一个“主要活动”,它位于游戏活动的后面。

之前:

[Game Activity] --> SurfaceView --> init (loading bitmaps) --> starting the game

现在:

[Main Activity] --> (user needs to click on "PLAY" button) -->...
[Game Activity] --> SurfaceView --> init (loading bitmaps) --> starting the game

这就是问题所在。每次用户单击 PLAY 按钮时,都会创建一个新的 Game Activity 实例,它必须通过“init”并重新加载位图...... 编辑:例如,如果在游戏过程中用户按下后退按钮。

显然,这是一个糟糕的设计架构。有人能提出更有效的方法吗?

【问题讨论】:

    标签: android memory-management bitmap


    【解决方案1】:

    使用静态类来存储位图,在游戏第一次启动时调用 load() 方法(可能在启动画面期间),此方法还可以确保您只将每个位图加载到内存中一次。

    例如:

    public class Art {
    
        public static Bitmap enemy;
        public static Bitmap player;
    
        public static void load () {
            enemy = loadBitmap('enemy.png');
            player = loadBitmap('player.png');
        }
    
        private static Bitmap loadBitmap(String filename) {
            //create and return bitmap here
        }
    
    }
    

    然后,当您创建游戏对象时,您只需调用 Art.player 即可获取您的玩家图像。

    也许,您不应该使用两个活动,而只是在用户点击播放时移动布局。

    【讨论】:

    • 谢谢——但我在某处读到它不建议在辅助活动的视图中引用静态位图——因为当活动完成时,垃圾收集器将无法收集作为其子项之一的活动是指静态活动。虽然我不确定这个说法有多准确......
    • 它们永远不会被垃圾回收,因为它们是静态的,从您加载它们的那一刻起,它们就存在于整个应用程序生命周期中。您不希望 GC 发生,因为这会对性能造成很大影响。
    • 如果它能让你感觉更好,Mark Persson(Minecraft 的创造者)使用这种方法:github.com/libgdx/libgdx/blob/master/demos/metagun/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2011-10-18
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多