0

私は単純な疑問を持っています。Androidでは、静的オブジェクトを作成して任意の場所からアクセスできるため、次の場所で使用および使用することになっているものを渡すString必要があるとほとんどどこでも言われていますintIntentputextra()activityactivity

そうする意図を使用する背後には何らかの理由が必要です。Javaで行うのと同じように通常どおりにintentオブジェクトを渡す必要がある理由を誰かが明確にしてください。activity

4

5 に答える 5

7

アクティビティを静的なコンテキストで考えていないからです。アクティビティにはライフサイクルがあるため、データをこのライフサイクルを回避するのではなく、このライフサイクルに組み込むようにしています。

静的変数を使用するだけで直接問題はありませんが、いくつかの問題が発生する可能性があります。たとえば、 の複数のインスタンスを表示するとしますActivityString子に必要な は、以前に必要だったものとは異なる可能性があるため、そのActivityの前のインスタンスに戻るとActivity、値は期待したものではありません。

を に通すとStringIntentActivity独立します。他のActivityものと密結合するように設計されるべきではありません。データを渡すことは、正しいデータを渡す限り、誰でもこれを開始できることIntentを意味します。ActivityActivity

とはいえ、変更されず、アプリの複数の部分からアクセスされる定数値や、複数のアクティビティが必要とする可能性のあるデータなど、静的にアクセス可能な変数の使用が合理的な場合もあります。

于 2012-06-13T04:50:37.227 に答える
3

一般に、静的を使用して、あるデータから別のデータに渡すことができActivityます。それが最良のアイデアだという意味ではありません。Intent extrasを使用する理由はいくつかあります。

  1. コンベンションです。 これは、ほとんどの Android 開発者が行っていることであり、重要なことです。あなた以外の誰かがあなたのコードを読んだり保守したりする場合は、プログラミングの問題に対する一般的な解決策を使用することをお勧めします。

  2. 一般に、Java やその他の OO プログラミング言語では、静的変数の使用を避けることが推奨されます (定数でない限り)。 これがなぜなのかについての 1 つの記事と、.

  3. 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は、おそらく静的変数を使用できます。私が概説した理由から、私はまだそれをお勧めしません.

于 2012-06-13T05:11:40.173 に答える
2

Intent からIntent定義を読み取る

インテントは、実行される操作の抽象的な記述です。Android Intents は、コンポーネント (Activity、Service、BroadcastReceivers) をアクティブ化するために使用されます。静的変数を介して文字列またはその他のデータを渡すことができますが、静的変数を使用している場合、大規模なアプリケーションでは、管理に多くの頭痛の種が発生するため、これは良い方法ではありません。

また、読み取りインテントには、暗黙的インテントと明示的インテントの 2 種類があります。明示的インテントでは、静的変数を使用してターゲット コンポーネントを知ることができますが、ターゲット コンポーネントが指定されていない暗黙的インテントでは、静的変数は役に立ちません。

于 2012-06-13T04:48:11.847 に答える
0

インテントで .putExtras() を使用する主な理由は、2 つのアクティビティ間で文字列配列などの大きなオブジェクトを渡すためだと思います。

とはいえ、複数のアクティビティで使用するすべての変数を含むグローバル クラスを作成することをお勧めします。すべて 1 か所にある複数の変数にアクセスする方が、一連の変数を相互に渡そうとするよりもはるかに簡単です。活動。

于 2012-06-13T04:49:05.517 に答える
0

簡単に言えば、静的変数はロード時にプリロードされるはずです...したがって、メモリ使用量と処理が増加し、アプリケーションが静的変数まで実行されなかった場合..変数をプリロードする価値はありません.

于 2012-06-13T04:56:39.923 に答える