2013-03-01 68 views
3

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

回答

0

不要在主線程中創建位圖。將它們推到背景上或在完成其他所有操作後再執行。

+0

感謝@alex,能否詳細說明一下?我有2個線程,一個用於UI,另一個用於渲染/更新邏輯。你的意思是加載繪圖/邏輯線程上的所有內容嗎?我不確定這是什麼意思,但嘗試過,不幸的是它沒有任何區別。還有第二種選擇(當所有事情都完成時做) - 問題是動畫中從來沒有停頓,我正從一個動畫活動轉移到另一個動畫活動 - 你可以擴展這個想法嗎?再次感謝 – Zippy 2013-03-01 04:03:21