マルチプロセス開発におけるsharedpreferencesデータ共有問題の解決策-TrayPreferences
20157 ワード
開発の過程で、私と同じように1つ以上のサービスを使用するマルチプロセス開発があるはずです.しかしSharedPreferencesのマルチプロセスへのサポートはよくありません.あなたは何を使っても役に立たないので、公式は元のMODEを廃棄しました.MULTI_PROCESSは、プロセス間アクセス値をContentProviderなどでより信頼できるものにすることをお勧めします.githubでAndroid SharedPreferencesの代替案Trayを見て勉強しました.プロパティContentProviderベースのマルチスレッドのデータストレージスキームは、マルチスレッド、マルチプロセスをサポートします.
1.まずリソースjarパッケージをダウンロードします.http://download.csdn.net/detail/u011068702/9614526
2.アダプタクラスを追加
1.まずリソースjarパッケージをダウンロードします.http://download.csdn.net/detail/u011068702/9614526
2.アダプタクラスを追加
import android.content.Context;
import net.grandcentrix.tray.TrayPreferences;
/**
* Created by wzl on 17-1-16.
*/
public class AppPrefs {
private static final int VERSION = 1;
private static volatile TrayEMMPrefs mPrefs;
//private static final Object PrefsSyncObject = new Object();
/**
* TrayPreferences
*/
private static class TrayEMMPrefs extends TrayPreferences {
public TrayEMMPrefs(Context context) {
super(context, context.getPackageName(), VERSION);
}
}
private AppPrefs(Context context) {
}
private static TrayEMMPrefs getPrefs(Context context) {
if (mPrefs == null) {
synchronized (AppPrefs.class) {
if (mPrefs == null) {
mPrefs = new TrayEMMPrefs(context);
}
}
}
return mPrefs;
}
/**
* Boolean
*/
public static void putSharedBoolean(Context context, String key, boolean value) {
TrayEMMPrefs prefs = getPrefs(context);
prefs.put(key, value);
}
/**
* Int
*/
public static void putSharedInt(Context context, String key, int value) {
TrayEMMPrefs prefs = getPrefs(context);
prefs.put(key, value);
}
/**
* Long
*/
public static void putSharedLong(Context context, String key, long value) {
TrayEMMPrefs prefs = getPrefs(context);
prefs.put(key, value);
}
/**
* String
*/
public static void putSharedString(Context context, String key, String value) {
TrayEMMPrefs prefs = getPrefs(context);
prefs.put(key, value);
}
/**
* Boolean , false
*/
public static boolean getSharedBoolean(Context context, String key) {
return getSharedBoolean(context, key, false);
}
/**
* Boolean , key , defaultValue
*/
public static boolean getSharedBoolean(Context context, String key, boolean defaultValue) {
TrayEMMPrefs prefs = getPrefs(context);
return prefs.getBoolean(key, defaultValue);
}
/**
* Int , key , 0
*/
public static int getSharedInt(Context context, String key) {
return getSharedInt(context, key, 0);
}
/**
* Int , key , defaultValue
*/
public static int getSharedInt(Context context, String key, int defaultValue) {
TrayEMMPrefs prefs = getPrefs(context);
return prefs.getInt(key, defaultValue);
}
/**
* Long , key , 0
*/
public static long getSharedLong(Context context, String key) {
return getSharedLong(context, key, 0);
}
/**
* Long , key , defaultValue
*/
public static long getSharedLong(Context context, String key, long defaultValue) {
TrayEMMPrefs prefs = getPrefs(context);
return prefs.getLong(key, defaultValue);
}
/**
* Int , key , null
*/
public static String getSharedString(Context context, String key) {
return getSharedString(context, key, null);
}
/**
* Int , key , defaultValue
*/
public static String getSharedString(Context context, String key, String defaultValue) {
TrayEMMPrefs prefs = getPrefs(context);
return prefs.getString(key, defaultValue);
}
public static void remove(Context context, String key) {
TrayEMMPrefs prefs = getPrefs(context);
if (key != null) {
prefs.remove(key);
}
}
/**
*
*/
public static void clear(Context context) {
TrayEMMPrefs prefs = getPrefs(context);
prefs.clear();
}
}
3. AndroidManifest.xml
<provider
android:name="net.grandcentrix.tray.provider.TrayContentProvider"
android:authorities="com.sangfor..client.awork.tray"/>
4. String ,eg:
:AppPrefs.putSharedString(activity,Constant.LAST_VTALKIE, number);
:AppPrefs.getSharedString(this,Constant.APPTOKEN)