1

の代わりに 3 番目のクラスの静的フィールドを使用してからActivity Aに値を転送することに不利な点はありますか?Activity BExtraBundle

私のアプリケーションでは、2 つActivityの 間で転送する必要がある値が 15 ~ 20 個ある場合があります。私の意見では、一種の の静的フィールドでこれを解決する方が明快ですTransferHandler

現時点では、1 つの欠点を念頭に置いています。B をExtras開始する前にに値を入れないと、 が得られます。静的フィールドで解決すると、値の割り当てを忘れている可能性があり、その値が以前に別の場所から割り当てられていた場合、Bで間違った値が使用されている可能性があります。 「プログラムの問題」ではありません。それで、それ以上のマイナス点はありますか、それとも私は自由に道を選ぶことができますか? 2 つのバリアントのパフォーマンスはどうですか?ActivityExceptionActivity

4

4 に答える 4

4

まず第一に、静的な値を使用する場合は、Applicationクラスを使用してこれを行う必要があります (Android システムは、それが真のシングルトンであることを保証するため)。

したがって、カスタム Application クラスの属性にデータを格納し、特定のメソッドを使用してこれらの値を格納および取得できます。これにより、値を「忘れる」ことができなくなります。

また、15-20 では、これらすべてを格納するために特別な POJO クラスを作成することを強くお勧めします...

于 2012-11-18T14:29:54.157 に答える
2

Androidで情報を渡すために静的クラスを使用することの最大の欠点は、静的フィールドとオブジェクトがシステムによっていつでもクリアされる可能性があることです。つまり、静的な非最終値は常にnull になる可能性があります。

したがって、ほとんどの場合は問題なく動作しますが、これらの null 状況を確実に処理しないと、ユーザーがアプリを使い始めると、システムが必要と判断したため、ときどき null ポインター例外クラッシュが発生します。それらの静的フィールドに格納されているそのメモリ。

私の意見では、アクティビティ間でデータを渡すための最良の方法は、インテントを使用することです。良い例については、こちらを参照してください。または、データベースまたはsharedpreferencesを使用します。

Google では、Activities/Services 間のパス データについてもよく読んでいます

于 2012-11-18T14:48:26.240 に答える
0

3 番目のクラスを使用して、あるアクティビティから別のアクティビティに値を転送することはできません。これが問題です。アクティビティで 1 つのオブジェクトを作成し、いくつかの値をそこに格納します。次に、アクティビティ b でもう 1 つのオブジェクトを作成する必要がある値を使用した後、アクティビティ b で作成されたオブジェクトには、アクティビティ a で割り当てた値がありません。

于 2012-11-18T14:20:56.747 に答える
-1

SharedPreferences クラスを使用して、変数の値を保存できます。

SharedPreferences settings = getSharedPreferences("shared_pref", MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = settings.edit();
    // With editor you put data
    editor.putString(firstName, "John");
    editor.putString(lastName, "Smith");
    editor.commit();

すべてのアクティビティでこのデータにアクセスできます。

// With settings you access to data in different activities 
SharedPreferences settings = getSharedPreferences("shared_pref", MODE_WORLD_READABLE);

String firstName = settings.getString(firstName, null);
String lastName = settings.getString(lastName, null);
于 2012-11-18T14:39:25.683 に答える