2

ここでこの質問へのリードを尋ねました。UIスレッドまたは単純なゲームのゲームスレッド(月着陸船のサンプルに基づく)のAndroidリソース(res内)フォルダーを読むことが推奨されるかどうかを知りたいです。月着陸船では、ゲーム ループを開始する前にリソースを割り当てていることがわかります。ただし、多くのリソースがある場合、それはあまりうまくスケールアップしません。前の質問への回答によると、バックグラウンド スレッドでビットマップなどのリソースを読み取っても問題ありません。今、これが正しい方法であるかどうかを知りたいです。

代替アーキテクチャは、時々 Runnable を ui-thread に投稿し、その後リソースを割り当てることです。

ガベージコレクションは機能しますか?GC が実行されているスレッドがわかりませんでした。しかし、オブジェクトが割り当てられたスレッドで実行されると思います。

4

1 に答える 1

1

前の質問への回答によると、バックグラウンド スレッドでビットマップなどのリソースを読み取っても問題ありません。今、これが正しい方法であるかどうかを知りたいです。

ここのドキュメントに従って、

「大きなビットマップを効率的にロードする」レッスンで説明した BitmapFactory.decode* メソッドは、ソース データがディスクまたはネットワークの場所 (または実際にはメモリ以外のソース) から読み取られる場合、メイン UI スレッドで実行しないでください。このデータの読み込みにかかる時間は予測できず、さまざまな要因 (ディスクまたはネットワークからの読み取り速度、画像のサイズ、CPU の能力など) によって異なります。これらのタスクのいずれかが UI スレッドをブロックする場合、システムはアプリケーションに非応答のフラグを立て、ユーザーはアプリケーションを閉じるオプションを利用できます (詳細については、応答性の設計を参照してください)。

したがって、別のスレッドを使用して、上記の条件でリソースをロードできます。

それはあなたのニーズとリソースのサイズと数に依存すると思います。他に考慮すべきことがあるとしても. たとえば、すべてのリソースが読み込まれるまでアプリ ユーザーが次の画面に移動できないようにする場合は、スレッドを使用すると便利です。

ガベージ コレクションはデーモン スレッドで動作します。デーモン スレッドはバックグラウンドで実行されます。ガベージ コレクションは、オブジェクトがガベージ コレクションの対象になると、つまり、利用可能なライブ参照がなくなったとき、またはメモリが少なくなりすぎたときに実行されます。このリンクを使用して、メモリ割り当ての追跡の使用と、頻繁なガベージ コレクションの発生を回避する方法について理解してください。

于 2013-01-24T05:53:13.403 に答える