Android6.0でMODE_MULTI_PROCESSが非推奨になったので、プリファレンスのモード指定は、MODE_PRIVATE一択になりました。
Android6.0 (Marshmallow)で、MODE_MULTI_PROCESSが非推奨になりました。
http://developer.android.com/intl/ja/reference/android/content/Context.html#MODE_MULTI_PROCESS
MODE_MULTI_PROCESS、プレファレンスファイルを作成する時などに、getPreferences等のメソッドの引数に指定されるファイルアクセスモードで、AndroidOS3.0の時に新しく追加され、複数のプロセスから同じプレファレンスファイルにアクセスする時に使用します。
今回、以下のような説明が記載されていました。
API Level23で非推奨
MODE_MULTI_PROCESSは、異なったプロセス間での同時修正を両立するためのメカニズムを提供しません。さらにアンドロイドの一部のバージョンでは確実に動作しません。....
アプリケーションは、これを使用しないでください。その代りにContentProviderのようなクロスプロセスでのデータ管理手法を使用してください。
確実に動作していなかったようです。
プリファレンスのアクセスモードには、他には
MODE_WORLD_WRITERABLE,MODE_WORLD_READABLE等他のアプリから読み書き可能アクセスモード指定もありましたが、これらは、API Level17で非推奨になっています。
API Level17で非推奨という事で、今まで以下の4つあったアクセスモードですが
他の全てのアプリから書き込み可能なファイルを作成するのは非常に危険です、またセキュリティホールをアプリケーションに引き起こす事があります。
代わりにアプリケーションは、ContentProviderや、BroadcastReceiverやServiceのような、相互通信のための正式な機能を使用する事を強くお勧めします。
このアクセスモードは、バックアップやリストアした時に、ファイルアクセスモードがそのままである事はは保証されません。
- MODE_PRIVATE
- MODE_WORLD_READABLE(非推奨)
- MODE_WORLD_WRITEABLE(非推奨)
- MODE_MULITI_PROCESS(非推奨)
MODE_PRIVATE=0x00のみになりました。
最後に
小ネタでしたが、WORLDモードを使っているアプリは結構あり、セキュリティ的に問題でした。アプリ間のデータ共有は、ContentProviderとか他の物でもできるし、サーバーでも良いわけなので、自分用のファイルしか作れなくなったのはシンプルで良くなったと思ってます。
ただ、シェアードプレファレンスの、「シェアード」という名前が浮いてしまうことになってしまったのがかわいそうです。