3

これまでのところ、アプリにはスプラッシュスクリーン、メニュー、ゲームの 3 つの主要なアクティビティがあります。

3つすべてにアニメーションがあります(スプラッシュスクリーンは非常に単純なアニメーションです). 問題は、あるアクティビティから次のアクティビティに移行する (および前のアクティビティに戻る) ときに発生します。

たとえば、ユーザーはBアニメーション メニューであるアクティビティを実行しています。彼らは押しStartて、ゲームに連れて行かれます。ただし、メニュー アクティビティがフェード アウトする直前 (およびフェード アウト中) には、アニメーションが途切れ途切れになります。同様に、ゲームが最初に開始されたとき、アニメーションは最初の 1 秒間ほど途切れ途切れになります。

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
}
4

1 に答える 1

0

メインスレッドでビットマップを作成しないでください。それらをバックグラウンドにプッシュするか、他のすべてが完了したら実行します。

于 2013-03-01T03:48:15.147 に答える