到目前爲止,我的應用程序中有3個主要活動,即啓動畫面,菜單,遊戲。活動過渡期間的動畫變慢
所有3個都有動畫(啓動畫面非常簡單)。當我從一個活動轉換到下一個(並返回到前一個)時會出現問題。
例如,用戶處於活動B
這是一個動畫菜單。他們按開始並被帶到比賽。然而就在菜單活動淡出之前(以及淡出時),動畫變得非常不連貫。同樣,當遊戲第一次開始時,動畫在第一秒左右就非常波動。
我在每個活動的Surfaceview
類構造函數中加載/創建位圖(和其他實體)。我正在創建縮放的位圖,並在同一個類中的initialise()
方法中初始化其他所需的變量以填充數組等。 (我在相應活動類的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
}
感謝@alex,能否詳細說明一下?我有2個線程,一個用於UI,另一個用於渲染/更新邏輯。你的意思是加載繪圖/邏輯線程上的所有內容嗎?我不確定這是什麼意思,但嘗試過,不幸的是它沒有任何區別。還有第二種選擇(當所有事情都完成時做) - 問題是動畫中從來沒有停頓,我正從一個動畫活動轉移到另一個動畫活動 - 你可以擴展這個想法嗎?再次感謝 – Zippy 2013-03-01 04:03:21