前提・実現したいこと
androidで開発を行っている方に以下の点についてお聞きしたいと思います(android初心者かつ独学中です)。
・Activityのオブジェクトを他のclass内で参照したい場合、どのような対応を行うか。
例えば以下のようなケースを考えています。
Activity A(画面構成などの機能を持たせる)
Service B(位置情報管理の機能を持たせる)
class C(位置情報において特に情報取得の機能を持たせる)
この時、class C内でaddOnSuccessListenerメソッドを使おうとすると、引数にActivityのオブジェクトを渡す必要があります。自分が理解できた限りでは以下1.-4.のような対応を考えましたが、それぞれマイナス面があるように思います。
1.Activity A内にstaticフィールドを作成しActivity Aのオブジェクトを格納する。class C内で当該staticフィールドを参照する。ただし、Activity AがonDestroyされてもstaticフィールドは維持されるのでメモリリークが発生する可能性がある。メモリリーク回避のためにonDestroy時にstaticフィールドにnullを入れる。
2.Activity AにSerializableを実装させ、Intent、及びputExtraでActivity AのオブジェクトをService Bに渡す(以下のコード例。言語はJavaです。)。Class C内で当該オブジェクトを参照する。
java
1public class Activity extends AppCompatActivity implements Serializable { 2... 3 // Bind to the Service 4 intent = new Intent(this, Service.class); 5 intent.putExtra("Activity", Activity.this); 6 bindService(intent, mConnection, 7 Context.BIND_AUTO_CREATE);
ただし、Serializable は色々とリスクを含む(Effective Java 3rd 項目85)ので、できれば回避すべき。
3.Activity AにParcelableを実装させて、Intent、及びputExtraでService Bに渡す。ただし、Parcelableは実装に手間がかかる。
4.classに分け持たせたりせず、Activityに必要な機能はActivity内に書く。Activityのオブジェクトを他classに渡す心配する必要がなくなるが、Activityのコードが長くなる。初心者向けの本などではこう示されているものをよく見かける。ただし、後の拡張などを考えると、できれば機能ごとにclassに分けて書いておきたい。
自分が理解できた範囲だとこの程度ですが、皆様が普段どう対応されているかアドバイスいただけると大変助かります。Activityのオブジェクトを他classで参照したいケースは比較的ありそうですが、探し方が悪いのか検索しても見つけられず悩んでいます。
回答1件
あなたの回答
tips
プレビュー