私は単純な疑問を持っています。Androidでは、静的オブジェクトを作成して任意の場所からアクセスできるため、次の場所で使用および使用することになっているものを渡すString
必要があるとほとんどどこでも言われていますint
Intent
putextra()
activity
activity
そうする意図を使用する背後には何らかの理由が必要です。Javaで行うのと同じように通常どおりにintent
オブジェクトを渡す必要がある理由を誰かが明確にしてください。activity
私は単純な疑問を持っています。Androidでは、静的オブジェクトを作成して任意の場所からアクセスできるため、次の場所で使用および使用することになっているものを渡すString
必要があるとほとんどどこでも言われていますint
Intent
putextra()
activity
activity
そうする意図を使用する背後には何らかの理由が必要です。Javaで行うのと同じように通常どおりにintent
オブジェクトを渡す必要がある理由を誰かが明確にしてください。activity
アクティビティを静的なコンテキストで考えていないからです。アクティビティにはライフサイクルがあるため、データをこのライフサイクルを回避するのではなく、このライフサイクルに組み込むようにしています。
静的変数を使用するだけで直接問題はありませんが、いくつかの問題が発生する可能性があります。たとえば、 の複数のインスタンスを表示するとしますActivity
。String
子に必要な は、以前に必要だったものとは異なる可能性があるため、そのActivity
の前のインスタンスに戻るとActivity
、値は期待したものではありません。
を に通すとString
、Intent
もActivity
独立します。他のActivity
ものと密結合するように設計されるべきではありません。データを渡すことは、正しいデータを渡す限り、誰でもこれを開始できることIntent
を意味します。Activity
Activity
とはいえ、変更されず、アプリの複数の部分からアクセスされる定数値や、複数のアクティビティが必要とする可能性のあるデータなど、静的にアクセス可能な変数の使用が合理的な場合もあります。
一般に、静的を使用して、あるデータから別のデータに渡すことができActivity
ます。それが最良のアイデアだという意味ではありません。Intent
extrasを使用する理由はいくつかあります。
コンベンションです。 これは、ほとんどの Android 開発者が行っていることであり、重要なことです。あなた以外の誰かがあなたのコードを読んだり保守したりする場合は、プログラミングの問題に対する一般的な解決策を使用することをお勧めします。
一般に、Java やその他の OO プログラミング言語では、静的変数の使用を避けることが推奨されます (定数でない限り)。 これがなぜなのかについての 1 つの記事と、別の.
Android 以外の通常のアプリケーションについて考えてみましょう。と を忘れてActivities
くださいIntents
。別のコントローラー オブジェクトを作成する必要があるコントローラー オブジェクトが 1 つある場合、次のようなコードを使用できます。
FirstController.java:
public void doSomething() {
SecondController newController = new SecondController();
newController.start();
}
また、最初のコントローラーから 2 番目のコントローラーに String 変数を渡したい場合は、静的変数を使用せず、次のようにします。
newController.start("WithSomeData");
ここで、もう一度 Android について考えてみましょう。 Activity
オブジェクトは同じ方法でインスタンス化されません。Activity
単にnew
別のものを起動し、それへの参照を保持し、そのメソッドを呼び出すことはできません。そのため、このかなり複雑なプロセスが必要になります。Activity
オブジェクトがオブジェクトを介して間接的に作成された場合Intent
、「呼び出し元」は「呼び出された」オブジェクトへの参照をまだ持っていないため、通常のメソッドとパラメーターの受け渡しを使用できません。したがって、この制限を受け入れる場合は、情報を渡す別の方法が必要になります。Intent
オブジェクトは を作成しActivity
たり、既存の に戻すために使用されるため、渡されたパラメータなどの追加データを処理する機能をActivity
提供することは理にかなっています。Intents
繰り返しになりますが、このソリューションは、静的変数の使用に対する一般的な嫌悪感と、それらの問題のために作成されました。
ただし、Activity
クラスが 2 つしかなく、それぞれの同時インスタンスが 1 つしかない場合Activity
は、おそらく静的変数を使用できます。私が概説した理由から、私はまだそれをお勧めしません.
Intent からIntent定義を読み取る
インテントは、実行される操作の抽象的な記述です。Android Intents は、コンポーネント (Activity、Service、BroadcastReceivers) をアクティブ化するために使用されます。静的変数を介して文字列またはその他のデータを渡すことができますが、静的変数を使用している場合、大規模なアプリケーションでは、管理に多くの頭痛の種が発生するため、これは良い方法ではありません。
また、読み取りインテントには、暗黙的インテントと明示的インテントの 2 種類があります。明示的インテントでは、静的変数を使用してターゲット コンポーネントを知ることができますが、ターゲット コンポーネントが指定されていない暗黙的インテントでは、静的変数は役に立ちません。
インテントで .putExtras() を使用する主な理由は、2 つのアクティビティ間で文字列配列などの大きなオブジェクトを渡すためだと思います。
とはいえ、複数のアクティビティで使用するすべての変数を含むグローバル クラスを作成することをお勧めします。すべて 1 か所にある複数の変数にアクセスする方が、一連の変数を相互に渡そうとするよりもはるかに簡単です。活動。
簡単に言えば、静的変数はロード時にプリロードされるはずです...したがって、メモリ使用量と処理が増加し、アプリケーションが静的変数まで実行されなかった場合..変数をプリロードする価値はありません.