サービスに複雑なオブジェクトを保持する必要があるため、確実にそのオブジェクトに戻ってきます(更新情報を保持しています)。当初、私はサービス実装で提出されたクラスと同じようにコード化しましたが、私は、更新オブジェクトがヌルに定期的にリセットされていることに気づいています。これはサーバークラス自体が再作成されたことを示しています。誰かがこのような更新オブジェクトを保存して再作成するための軽量で信頼できる戦略を推奨できますか?Androidサービスの永続フィールド
答えて
サービスを再開すると、onStop()
とonStart()
メソッドが呼び出されます。 onStop()
メソッドを使用して、永続的な場所にデータを保存することができます。アプリケーションsqlite
データベース。 onStart()
が呼び出されると、データを復元できます。
sqlite
データベースは、アンドロイドデベロッパーwebsiteで読むことができます。
私がやっていたら、私はSharedPreferencesを使います。それが複雑すぎる場合は、@ Scharrelsにsqlite DBを使用することに同意します(ほとんどのケースで、sqliteはsqliteを使用しているため、Googleの推奨事項となります)。
私はSharedPreferencesが多くの場合に便利であることを発見しました。まず、キーと値のペアリングストアで、さまざまなデータを簡単に保存できます。また、必要に応じてオブジェクトを文字列にエンコードし、単一のフィールドに格納することもできます。次に、複数のSharedPreferenceストアを、別の名前で検索するだけで(プライベートなままにして)使用することができます。最後に、データを取得してデータを格納することは、文字通りわずか2行のコード(必要なデータの数やシリアライゼーションを数えないため)を使用して簡単に使用できます。
SharedPreferencesはXMLファイルに格納されているため、トランザクションでは保証されません。 – CommonsWare
また、永続化する必要のあるオブジェクトの実際の複雑さに応じて、小さなSQLite DBよりも効率が悪くなる可能性があります。しかし、コード化すると、既存の何も解決策に比べて、永続性のために何かを得るのが非常に速くなります。プラスの面では、onDestroy()内の永続性は終了し、プロセスを終了する前に終了することができます。 – lilbyrdie
マーク。私が固執しようとしているのは、HtmlClientのインスタンスとおそらくいくつかの派生オブジェクトです。これらはかなり複雑であり、直列化できない可能性があります。どうして?例えば、HttpClientはいくつかのクッキー数で初期化されます。私はいくつかのアプリケーションサーバー上で私のために作成されたセッションで、必要なクッキー数を確保しておく必要があります。私は何をしますか? – Bostone
- 1. Android SIPサービスの永続性
- 2. SQL永続性サービス
- 3. Windowsサービス - オブジェクトの永続性
- 4. Android永続ソケット接続ルール
- 5. Android/iOS永続データストレージ
- 6. WCFサービスHttp永続的な接続/セッション
- 7. Androidの永続的/オフラインイメージキャッシュ
- 8. 永続的なボトムシートのAndroid
- 9. Android WebView - フォームデータの永続性
- 10. Android Room AutoValueの永続ライブラリエンティティ
- 11. Android - PHP - MySQLの永続的な接続
- 12. サービスは永続的な「開始」ステータス
- 13. .NETとJAVA(永続性/ Webサービス/マーシャリング)
- 14. 永続的なサービスにデータを渡す
- 15. WCFサービスが永続しないリファレンスタイプのサービス
- 16. iOSアプリケーションとRails Webサービスとの永続的な接続
- 17. Androidの永続化削除TextView
- 18. Android - 永続的な記憶域のパーセル
- 19. Androidオブジェクトの永続性:Ektorp and CouchDB
- 20. Android Wearの永続的設定
- 21. 永続フィールドと派生フィールドを分離します
- 22. Android用SQL Liteデータベース永続ストレージ
- 23. Android Widget IDは永続的です
- 24. AndroidからNode.jsサーバーへの永続的なHTTP接続
- 25. 5つの永続クラスのための非控えめなスーパークラス3同じ場合もある永続フィールド?
- 26. AndroidサービスでBluetoothを接続
- 27. のワークフロー永続
- 28. あいまいなフィールドのgetter ...ルームの永続化ライブラリ
- 29. mysql永続接続
- 30. Angular2 - 異なるレベルのコンポーネント間で永続的なサービス
問題はonStopとonStartではなく、実際にはこれらのメソッドを提供するためにAndroidがクラスの新しいインスタンスを作成する可能性があると思います。私は本当に高価な処理の別の費用になるので、実際にsqlite dbルートに行きたくない。私はより軽い代替のシリアル化/逆シリアル化を探しています – Bostone
onStop()が呼び出された後、サービスインスタンスが強制終了されます。そういうわけで、このメソッドが呼び出されています:一方では、データをここに保存する必要があります。 データベースを使用しない場合は、Context.openFileOutput()を使用してファイルを保存できます。 Context.openFileInput()を使用して後で読むことができます(たとえば、onStart()が呼び出されたとき) – Scharrels
このルートに従ってください:もし私のサービスクラスにStringがファイルされていれば、onStart /変数が必要になるたびにSharedPropertiesに読み書きするのではなく、クラスフィールドとして使用する – Bostone