3

到目前为止,我的应用程序中有 3 个主要活动,启动屏幕、菜单、游戏。

所有 3 都有动画(启动画面是非常简单的动画)。当我从一个活动过渡到下一个活动(并返回到上一个活动)时,就会出现问题。

例如,用户处于活动B菜单中。他们按下Start并被带到比赛中。然而,就在菜单活动淡出之前(并且在淡出时),动画变得非常不稳定。同样,当游戏第一次开始时,第一秒左右的动画非常不稳定。

我在Surfaceview每个活动的类构造函数中加载/创建位图(和其他实体)。我正在initialise()同一类中的方法中创建缩放位图并初始化填充数组等所需的其他变量。onCreate()(我在相应的活动类中调用此方法)。

所以我猜这与我加载位图的方式/时间/位置有关。

我在 DDMS 中使用了分配跟踪器,但我看不到那里有任何问题(没有创建不需要的东西)。

当我退出并进入活动时,GC 正在运行,这可能是问题所在。

我不知道如何解决这个问题。

在应用程序开始时加载所有必需的位图等是否是标准做法,而不是在每个活动开始时按要求加载位图?(请注意,我的游戏循环中根本没有创建任何内容,问题通常仅在进入和退出活动时出现)。如果是这样,当我在我的初始(比如启动屏幕)活动中创建这些时,我如何才能从我的所有其他活动中引用它们?

我已经研究了很长时间(在这个网站上,通常在网上)并试图自己弄清楚,但我找不到明确的答案。

我所有的活动都遵循以下结构......

public class OptionsActvity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        displayOptionsScreen = new OptionsScreen(this);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(displayOptionsScreen);
        WindowManager w = getWindowManager();   
        Display d = w.getDefaultDisplay();
        int width = d.getWidth();
        int height = d.getHeight();
        myApp MyAppSettings = (MyApp) getApplicationContext();   
        displayOptionsScreen.initialise(width, height);
    }
}

public class OptionScreen extends SurfaceView implements
        SurfaceHolder.Callback {    

    // set up / declare variables here
}

public OptionsScreen(Context context){
    // Create bitmaps etc here
}

public void initialise(int w, int h) {
    // Create scaled bitmaps here
    // Initialise other values
}
4

1 回答 1

0

不要在主线程上创建您的位图。将它们推到后台或在其他所有操作完成后执行。

于 2013-03-01T03:48:15.147 回答