編集
ロード/作成コードを非同期タスクに移動した後 (以下を参照)、元のスプラッシュスクリーンで発生した初期の問題がまだ残っています。
それらは次のとおりです。
1) onCreate で非同期タスクを開始すると、すべてが読み込まれますが、私のダイアログは onStart() が呼び出されたときにのみ表示され、空白の画面で長い一時停止があり、すべてが読み込まれた後にプロセス全体が無意味になります、「読み込み中」ダイアログが消える前に一瞬点滅します。
2)オブジェクトのロード/作成などを onStart に移動できません。これは、a) 発生したくないバックグラウンドに送信された後にアプリが再開された場合でも再度実行されるため、および b) 復元を呼び出すときまだ作成されていないオブジェクトのプロパティを復元しているため、nullPointerException が発生します。
誰かがこれらの問題を回避し、簡単なスプラッシュスクリーンを作成する方法をアドバイスしてくれたら本当にありがたい. ありがとう!
バックグラウンド
私のアプリは 1 つのアクティビティのみを使用しており、可能であればその方法を維持したいと考えています。
私はこれに1週間以上苦労しているので、誰かが私を助けてくれることを本当に願っています.
私がしたいのは、リソースのロード中 (およびオブジェクトの作成中など) に、単純な「ロード中」メッセージが画面に表示されるスプラッシュスクリーンを使用することだけです。ポイントがいくつかあります。
条件
1) スプラッシュスクリーンは独自のアクティビティを持つべきではありません- すべてが単一のアクティビティに含まれている必要があります
2) スプラッシュスクリーンはXML レイアウトを使用しないでください(ビューを使用してロード中の PNG を表示するスプラッシュスクリーン クラスを作成しました)。
3) 私のアプリは openGL ES 2.0 であるため、テクスチャを OpenGL スレッドにロードする必要があります (GL 呼び出しを使用しないオブジェクトなどの作成は、必要に応じて別のスレッドに移動しても問題ありません)。
私がこれまでに試みたこと
これまでに行ったことは、ダイアログを作成し、onStart() メソッドで次のように表示することでした。
Dialog.show();
次に、すべてを onSurfaceCreated メソッドにロードしてから、次のように削除します。
Dialog.dismiss();
ただし、さまざまな理由でこれを変更する必要があったため、onCreate() メソッド内の呼び出しからオブジェクトを作成し、テクスチャを GL レンダラーの onSurfaceCreated メソッドにロードするだけです。
ただし、これは、ダイアログがonCreate の後まで表示されないため、スプラッシュ スクリーンが表示される前にすべてが作成されている間に遅延 (空白の画面) が発生し、テクスチャが読み込まれるまで画面に表示されたままになることを意味します。これには他にも問題があり、別の日に待つことができます!
したがって、私のアプローチは明らかに非常に間違っています。SOとGamedev.SEで見つけることができるすべてのチュートリアルと、スプラッシュスクリーン関連のすべての質問を読みましたが、これをどのように達成できるかについての説明はまだ見つかりません(私にとっては理にかなっています)。
ここで誰かが説明できることを願っています。