2016-12-30 5 views
0

greendao ORMの学習と使用を開始しましたが、この問題があります。 私はメモ/警告アプリケーションを作成しています。これは、さまざまなアクティビティやサービスや受信者からDBにアクセスする必要があることを意味します。 たとえば、ある画面でアラートの値を設定しています。 サービスと受信者で、私はこれらの値を読んでそれに応じて行動しています。アプリケーション間でgreendaoを使用してdbにアクセス

セットアップとオブジェクトとの関係でのDBアクセスは()私はセットアップをしたとして、コーダがテストし、デバッグするためのOnCreateの私の主な活動の中から正常に動作しているようです。

すべてのDBアクセスと操作を処理するシングルトンクラスを作成することを考えましたが、アクティビティには「コンテキスト」がありません。 コンテキストをパラメータとして渡すのは悪い考えです。 私は上記のすべてからDBアクセスを得る方法を見つける必要があります。

また、主なアクティビティでDBを初期化しないでください。 誰かがそれについて詳しく説明し、初期化のアイデアと主な活動の問題を説明できますか?

希望の問題をクリアすることができました。 読んでいただきありがとうございます。

+0

あなたのプロセスの有効期間のシングルトンであるアプリケーションコンテキストを、使用することができます。 'context.getApplicationContext()' – Karakuri

+0

@Karakuriに感謝します。しかし、サービスやヘルパークラスでコンテキストがすぐに利用できません。 –

+0

私はパラメータとして渡すコンテキストを読んで漏れを引き起こします。 そして、主な問題は、それが使用不能だときのコンテキストを取得する方法です –

答えて

0

コンテキストをリークすると、正常なライフサイクル(通常Activity)または停止したService(通常はActivity)を超えたContextへの参照が保持されます。メソッドの引数としてContextを渡しても、リークがあるわけではありません。フィールドにContextへの参照を保存し、システムが破壊しようとしているポイントを超えて保持すると、リークが発生するだけです(リファレンスによってガベージコレクションされないようにする)。たとえば、Contextへの参照を保持する他のものへの参照を保持している場合、その例はViewです。

あり限り、アプリケーション・プロセスが行うように住んでいるアプリケーションContextであり、常にシングルトンです。それへの参照を保持することは漏れではありません。つまり、シングルトンデータベースのヘルパークラスで、漏れてしまうことなく心配することなく使用できます。単純に.getApplicationContext()を呼び出してこのアプリケーションコンテキストインスタンスを取得できるため、シングルトンは実際にはContextを受け入れることができます。

サブクラスApplicationはオプションです。私の意見では、これを行う利点は、アプリケーションコードを実行する最初の機会であるため、アプリケーションのonCreate()メソッドを使用してワンタイム設定を行うことです。ここで

は便利かもしれませんContextの上の素晴らしい記事です:https://possiblemobile.com/2013/06/context/

関連する問題