【问题标题】:Animation slow during activity transitions活动转换期间动画缓慢
【发布时间】:2013-02-15 11:46:36
【问题描述】:

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

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

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

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

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

我在 DDMS 中使用了 Allocation Tracker,但我看不到任何问题(没有创建不需要的东西)。

当我退出并进入活动时,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
}

【问题讨论】:

    标签: android performance android-activity android-animation


    【解决方案1】:

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

    【讨论】:

    • 谢谢@alex,你能详细说明一下吗?我有 2 个线程,一个用于 UI,一个用于渲染/更新逻辑。您的意思是在绘图/逻辑线程上加载所有内容吗?我不确定这是否是您的意思,但尝试了它,不幸的是它没有任何区别。同样使用您的第二个选项(在完成其他所有操作后进行)-问题是动画永远不会暂停,我正在从一个动画活动转移到另一个动画活动-您可以扩展这个想法吗?再次感谢
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2011-08-25
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多