0

Androidアプリでアプリケーションを拡張したいのですが。これを行って、MyApplicationという拡張アプリケーションオブジェクトを作成し、それをマニフェストに追加しました。

ここで、いくつかの情報を保持するために、いくつかのゲッターとセッターを追加したいと思います。Contextを含まないクラスにアプリケーションContextを渡す必要があるようです。

たとえば、MyObjectというクラスを(独自のJavaファイルに)作成するとします。

public class MyObject {
  public void doStuff() {
    // do stuff
  }
}

doStuff()からMyApplicationにアクセスするにはどうすればよいですか?アプリケーションContextをMyObjectに渡す必要があるようです。これは典型的なことですか?漏れの可能性はありますか?

また、明確にするために、MyApplication(およびその中の変数)はアプリケーションのライフサイクル全体にわたって存続しますか?どちらの方法でも構いません。必要に応じて、これを確実に説明したいと思います。

そして最後に、アプリケーションを拡張するためにどのようなさまざまなことが役立つかを示すために、いくつかのサンプルソースへのリンクをいただければ幸いです。

4

2 に答える 2

7

私の知る限り、Android開発ではコンテキストの受け渡しも例外ではありません。まあ、それか私はそれを間違っています。

これに答える必要があるかどうかはわかりませんが、コンテキストから、次のApplicationようにオブジェクトにアクセスできます。

((MyApplication) context.getApplicationContext()).getMyGlobalVariable();

はいMyApplication、クラスはアプリケーションのライフサイクル全体を通して生きる必要があります。

この回答もチェックしてください。

于 2010-09-23T15:14:32.177 に答える
1

正しいコンテキストを渡す限り、Androidではコンテキストの受け渡しは問題ありません。アクティビティをコンテキストとして渡すことは避けてください。getApplicationContext()代わりに使用してください。

Applicationobjectとそれに関連するすべてのデータは、アプリケーションの存続期間を通じて存続します。アプリがバックグラウンドにあり、すべてのアクティビティが表示されなくなったためにメモリからクリアされた場合でも。アプリケーションオブジェクトがメモリからクリアされるタイミングについては十分に文書化されていませんが、アプリがバックグラウンドにあり、メモリがまれな場合、OSがアプリ全体を破壊し、アプリケーションオブジェクトをメモリから削除する可能性があると思います。

コンテキストにアクセスできない場合、アプリケーションオブジェクトを取得する方法はありません。アプリケーションへの参照のみが必要な場合は、アプリケーションオブジェクトを渡すだけで、画面に表示されなくなったアクティビティへの参照を保存し、この参照を通じてアクティビティ全体をリークすることで発生する可能性のあるエラーを最小限に抑えることができます。

サンプルコードはありませんが、いくつかのタスクへの参照を保持するために使用しました。これにより、現在実行中のタスクに応じて次のアクティビティの状態を変更する必要がある場合でも、タスクが戻るのを待たずに、ユーザーがアクティビティをすばやく切り替えることができました。

于 2010-09-23T15:52:44.007 に答える