1

私の Android プロジェクトには、バンドル エクストラ キー、ハンドラーのメッセージ引数、ダイアログ ID ant などを表す多くの定数があります。

handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 1, 0));
handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 2, 0));
handler.sendMessage(handler.obtainMessage(MESSAGE_OK, 3, 0));

ハンドラーで:

switch (msg.arg1) {
case 1:
    break;
case 2:
    break;
case 3:
    break;
}

彼は、静的な最終コンスタンスが多すぎると、多くのメモリが必要になると述べました。しかし、彼の解決策により、コードが読みにくくなり、リファクタリングしにくくなると思います。

私はこの質問を読んで、たくさんグーグルで検索しましたが、答えが見つかりませんでした。 java: 通常の 1 よりも final static int = 1 を使用していますか?

誰かが静的決勝のメモリコストを教えてくれることを願っています.

下手な英語でごめんなさい。

4

3 に答える 3

5

あえてリテラルに変更しないでください。コードが読みにくくなり、保守しにくくなります。

長い目で見れば、この「記憶喪失」の恩恵を受けるでしょう。

于 2012-05-09T08:12:01.683 に答える
2

技術的には、彼は正しいです - static int フィールドは追加のメモリを必要とします。

ただし、コストはごくわずかです。これは、int と、リフレクション サポート用の関連付けられたメタデータです。コードを読みやすくする意味のある名前を使用し、その番号が使用される場所でその意味がよく知られ、一貫していることを保証する利点は、明らかにそのコストを上回ります。

簡単なテストを行うことができます。異なる数値リテラルで 1000 回呼び出す小さなアプリケーションを作成しhandler.sendMessage、ビルドして .dex ファイルのサイズを書き留めます。次に、1000 個のリテラルを 1000 個の static int const に置き換えて、同じことを行います。2 つのサイズを比較すると、アプリが必要とする追加メモリの桁数がわかります。(そして、完全を期すために、ここに数字をコメントとして投稿してください:-))

于 2012-05-09T08:25:16.137 に答える
0

非常に少量のメモリを節約します。基本的には、関連するクラスに追加の定数を記録し、他のクラスから参照するために必要な追加のメタデータだけです。

メモリに極端な制約がない限り、これについて心配する価値はありません。

神秘的なマジック ナンバーではなく、名前の付いた static final 定数を使用する方が、長期的にはコードの保守性と健全性にとってはるかに優れています。

于 2012-10-21T03:11:23.543 に答える