Android 动画在活动转换期间变慢

Android 动画在活动转换期间变慢,android,performance,android-activity,android-animation,Android,Performance,Android Activity,Android Animation,到目前为止,我的应用程序中有3个主要活动:启动屏幕、菜单和游戏 所有3个都有动画(闪屏是非常简单的动画)。当我从一个活动转换到下一个(并返回到上一个)时,就会出现问题 例如,用户处于活动B,这是一个动画菜单。他们按开始键并被带到游戏中。然而,就在菜单活动淡出之前(当它淡出时),动画变得非常不稳定。类似地,当游戏第一次开始时,动画在第一秒钟左右的时间内非常起伏 我正在加载/创建每个活动的Surfaceview类构造函数中的位图(和其他实体)。我正在创建缩放位图,并在同一类中的initialise(

到目前为止,我的应用程序中有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
}

不要在主线程上创建位图。把他们推到后台,或者在其他事情完成后再做。

谢谢@alex,你能详细说明一下吗?我有两个线程,一个用于UI,一个用于呈现/更新逻辑。您的意思是加载绘图/逻辑线程上的所有内容吗?我不确定这是否是你的意思,但尝试了一下,不幸的是没有任何区别。还有你的第二个选择(当所有其他事情都完成后再做)——问题是动画中从来没有停顿,我正在从一个动画活动转移到另一个动画活动——你能扩展这个想法吗?再次感谢