到目前为止,我的应用程序中有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
}
答案 0 :(得分:0)
不要在主线程上创建位图。将它们推到后台或在完成其他所有操作后再进行操作。