活动过渡期间动画变慢

时间:2013-03-01 03:15:46

标签: android performance android-activity android-animation

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

所有3个都有动画(闪屏很简单就是动画)。当我从一个活动转换到下一个活动(并返回到上一个活动)时,会出现问题。

例如,用户处于活动B这是一个动画菜单。他们按开始并被带到游戏中。然而,就在菜单活动淡出之前(当它逐渐淡出时),动画变得非常不稳定。同样,当游戏首次开始时,动画在第一秒左右就会非常波动。

我在每个活动的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
}

1 个答案:

答案 0 :(得分:0)

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