0

アクティビティMyMainActivityがあるとします。たとえば、一連のコードで十分に複雑だとします。

別のアクティビティから、パブリック変数またはメソッドにアクセスするには、次のようにします。

MyMainActivity ma = new MyMainActivity();
ma.editVariableMethod();
String example_variable = ma.public_examplevariable;

MyMainActivity maをインスタンス化するとき、それはホールアクティビティを再度作成し、MyMainActivityからメモリまですべてを保存するようなものです。そうすれば、MyMainActivityを開始した場合と同じ量のメモリが必要になりますか、それとも、 MyMainActivityから変数を編集しますか?

4

2 に答える 2

3

アクティビティをインスタンス化することはできません。フレームワークがそれを処理する必要があります。パブリックメソッドを使用する場合は、静的メソッドにするか、アクティビティオブジェクトの有効なインスタンスへの参照を取得します。

編集:

Squonkが指摘したように、ユースケースによっては、少なくとも何をしているのかがわかるまでは、共有ロジックを別の新しいクラスに抽出する方がよい場合があります。アクティビティ内の内部変数またはメソッドへの「フルアクセス」を与えることは機能しているように見えるかもしれませんが、それは正しいアプローチではない可能性が非常に高いです。

于 2012-12-03T22:42:07.563 に答える
2

オブジェクトが何であれ、Androidのオブジェクト間でメモリ常駐オブジェクトを共有することは悪い習慣です。Androidはそれが機能することを保証しません。ほとんどのユースケースで利用できる代替手段があります。別のアクティビティで「パブリック変数にアクセスする」という特定のケースでは、startActivityForResult()を呼び出すか、アクティビティがSharedPreferencesなどに「共有」するデータを格納するようにすることができます。同じメソッドで、最初にクラスを別のオブジェクトに抽象化する必要があるかどうかを検討する必要があります。理想的には、アクティビティはPOJOに委任するフレームワークである必要があります。

于 2012-12-03T23:22:41.663 に答える