2017-04-22 4 views
0

シングルトンがandroid.soでどのように脆弱であるかに関する多くのブログを読んだことがあります。私の質問はそのようなグローバルオブジェクトを維持する方法またはapplication.iにリストする方法です。共有プリファレンスは一方向ですが、このようなオブジェクトやリストは効率的に表示されます。グローバルオブジェクトまたはリストを管理する

+0

この問題についていくつかの情報を提供する必要があります。何をしたいですか?あなたはすでに何をしましたか? – pouya

答えて

1

ファイルやSQLiteデータベースを使用してアンドロイドアプリにデータを保存できます。あなたは、リンクファイルまたはSQLiteデータベースにデータを保存の詳細については、下記をチェックすることができます。ファイルに

の保存データを一般順 https://developer.android.com/training/basics/data-storage/files.html

で読み取られたデータの長いシーケンスを格納するのに理想的ですデータベースにデータを保存すると、データを繰り返すか、構造化のための理想的です: https://developer.android.com/training/basics/data-storage/databases.html

0

あなたは自分のアプリが動作するようになるまで、グローバルとしてリストを保持したい場合は、その後のは、「ヘルパー」と言ってみましょうとセントを初期化する新しいクラスを作成しますaticそのクラスのリスト。今すぐあなたは "Helper.yourStaticListName"によってアプリ内の任意の場所にそのリストにアクセスすることができますし、追加/削除することができますまたはアプリケーション内の任意の場所のリストからデータを取得します。 しかし、あなたがアプリケーションが閉じられていてもそのリストを保持したいのであれば、それには2つの解決策があります。 まず、ローカルデータベース "SQLiteファイル"をアプリケーションに作成し、そこにデータを追加/削除または取得します。

チェックこのチュートリアル:http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

第二の溶液をJSONにデータを変換し、文字列の中にそのJSONに変換し、共有設定で、それを保存することです。必要なときには、Shared Preferencesから文字列を取得し、JSONに変換して解析してデータを取得します。 最後に、JSONの解析について話しているときは、「GSONライブラリ」はうまく機能します。ここで

はリンクです:http://guides.codepath.com/android/leveraging-the-gson-library

は、この答えはあなたを助けることを願っています。

+0

@ Zohaib Hassanは環境設定に保存するのが良い方法ですか? –

+0

これは要件によって異なります。単一のデバイス内でデータを使用したい場合、その特定のデバイスにアプリケーションがインストールされるまで、またデータがあまりにも多くのスペースを取らないようになるまで(Jsonの文字列形式は非常に狭いスペースが必要です)共有環境設定は良いオプションです。しかし、Shared Preferencesに保存されているデータは安全ではないことに注意してください。他のアプリはあなたの許可なく簡単にデータにアクセスしたり変更することができるからです。 –

0

Android Serviceはどうですか?

アプリケーションを起動したときに初期化/開始することができます(アプリケーションを停止した時点で停止することもできます)。bindは必要なときにいつでも(オブジェクトとリストを入れて取得します)。

私はそれが効率的な方法であると信じています。

+0

サービスはバックグラウンド操作用であり、変数の格納用ではありません。 –

+0

@vipinagrahariそれでも、シングルトン/共有設定以外のオブジェクトを格納するための選択肢として使用できます。あなたはその質問に与えることができるどんな提案ですか? – Erwin

0

静的変数またはサービスロケータを持つ概念的な点は、シングルトンを持つことと非常によく似ています。したがって、グローバルな状態と結果を避けることが意図されている場合、それらを代替案として持つことは正しいとは限りません。

シングルトンクラスをインスタンスに変更することができます。インスタンスは1回のみインスタンス化され、必要に応じてコンポーネントやメソッドに挿入されます。 IoCフレームワークを使用して注入部分を処理したり、手動でファクトリパターンを使用してクラスのインスタンスを作成することができます(インスタンス作成を1つのみ制限できます)。このdiscussion threadは、問題とさまざまなオプションに関する多くの洞察を提供します。

0

は、だから私はあなたの質問の権利を理解していれば、あなたは基本的に、あなたが希望のものを格納しますアプリケーションを拡張するクラスを作成することは非常にthis question

をご覧くださいだ場合は、すべてのアプリケーションの上にいくつかのグローバル変数を格納する必要がありますあなたのアプリの開始時のように、それらのすべては、アプリを介してアクセスすることができます。

これが役に立ちます。

1

あなたのオブジェクトを管理するためにsharedPreferences、Sqliteデータベースを使用すると、シングルトンはあまり良くありませんが、静的変数は維持するのがより難しく、厳しいテストを行うでしょう、共有環境設定を使用して、非常に大きくない場合は、大量のデータがある場合はsqliteの使用をお勧めします。

あなたはアンドロイド
のためのORMライブラリを使用することができますが、あなたがsqliteのを使用して問題がある場合は

共有設定は、非常に使いやすいです、ここ1へのリンクです:あなたがグローバルにアクセス可能なオブジェクトを作成しようとしている場合は、http://greenrobot.org/greendao/

0

まず自分自身に尋ねるべきことは、なぜですか?グローバルにアクセス可能なオブジェクトが必要なのはなぜですか?たいていの場合、そうしないと、スコープが限定されたオブジェクトを作成して、アプリケーションの周りを渡すことができます。

グローバルにアクセス可能なリソースが必要な場合や、シングルトンを使用することがこれを達成する単なる方法です。 Android Docsあなたのデータストレージオプションによると、次のとおりです。

共有設定

ストアのキーと値のペアの民間プリミティブデータ。

内部ストレージ

ストアデバイスメモリ上の個人データ。共有外部ストレージに

外部ストレージ

ストア公開データ。

SQLiteのデータベース

Storeはプライベート・データベース内のデータを構造化。独自のネットワーク・サーバとウェブ上

ネットワーク接続

ストアデータ。

シングルトンは優れていますが、シングルトンは実装方法に応じて独自のリスクがあります。通常、開発者は、Loggers,Print spoolersなどのアプリケーション内でリソースを共有しようとしているときにこのパターンを使用します。SingletonsをJavaで作成するには複数の方法があります。レイジー初期化または静的初期化を使用できます。プロ/コンサルトを所有する「脆弱性」に関しては、シングルトンがスレッドセーフであるかどうか、それにアクセスできる人/何かなどの問題があります。このため、解決しようとしている問題を理解して理解することが理にかなっています。個人的には、あなたが解決しようとしているものが何であるかはっきりしていないので、これがどのようにあなたを助けたり傷つけたりするかについては詳しくは分かりません。私が言うことができるのは、最大の脆弱性は、ほとんどのグローバル変数と同様に、いつでもどこからでもアクセスできる最大の資産だということです。また、シングルトンがスレッドセーフであるかどうかにも問題があります。

個人的には、あなたが解決しようとしていることを評価し、適切な解決方法を選ぶ必要があると思います。たぶんシングルトンを使うのが正しい解決策かもしれませんが、そうでないかもしれません。しかし、あなたのすべての選択肢とそれぞれの強みと弱みを理解することは、この問題を解決する最善の方法になるでしょう。残念ながら、あなたや私のためにあなたの問題に十分な文脈を提供しておらず、あなたに忠実な勧告を与えることはできません。

0

グローバルオブジェクトを管理する最善の方法は、グローバルオブジェクトをまったく持っていないことです。私の経験に基づいて、多くの場合、シングルトンを使用する代わりに代わりのオプションがあります。とても良い説明がありますin this post

0

共有環境設定は良いですが、いくつかの変更を行うとある時に気付くでしょう。一つのpojo Javaクラスで静的定数変数を作成し、この変数をどこでも使用してください。 .shared環境設定を変更しない限り、検索と保存はあまり面倒ではありません。定数を使用する場合は、簡単に修正できるのは1つのクラスだけです

関連する問題