SharedPreference 实现不同进程间的数据共享
2013-07-04 14:53
323 查看
文章出处:http://blog.csdn.net/shift_wwx
请转载的朋友标明出处~~
详解可以看一下:SharedPreferences 详解
sharedpreference大家肯定很熟悉,一般用于数据的存储。
如下:
那么不同的进程是否可以共享一个sharepreference的xml呢?
下面做了两个简单的apk。
Activity A:
Activity B:
虽然通过以下code能获取到对应的对象,但是a中的mode设置的为Context.MODE_PRIVATE
会提示一个错误:Couldn't rename file /data/data/....PREFERENCES_NAME.XML to /data/data/....PREFERENCES_NAME.XML.bak
但是是否改成Context.MODE_WORLD_WRITEABLE或者是Context.MODE_WORLD_READABLE就可以了呢?
答案是不行,所以这一步是走不通的。
经过研究发现只要将android:sharedUserId="com.shift.test"两个进程设置为一样的就可以了,而且mode设为任何一个都是ok的。
请转载的朋友标明出处~~
详解可以看一下:SharedPreferences 详解
sharedpreference大家肯定很熟悉,一般用于数据的存储。
如下:
private void getSharedPreference(){ SharedPreferences mShare = getSharedPreferences(SHARE_NAME, Context.MODE_PRIVATE); mShare.getString("key", "default"); } private void setSharedPreference(){ SharedPreferences mShare = getSharedPreferences(SHARE_NAME, Context.MODE_PRIVATE); Editor mEditor = mShare.edit(); mEditor.putString("key", "hehe"); mEditor.commit(); }
那么不同的进程是否可以共享一个sharepreference的xml呢?
下面做了两个简单的apk。
Activity A:
public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private SharedPreferences mPreferences; private static final String SHARED_NAME = "test_share"; private static final int SHARED_MODE = Context.MODE_PRIVATE; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button save = (Button)findViewById(R.id.save); save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSharedPreference(); } }); } private void setSharedPreference(){ Log.d(TAG, "======setSharedPreference======="); mPreferences = getSharedPreferences(SHARED_NAME, SHARED_MODE); Editor mEditor = mPreferences.edit(); mEditor.putString("key", "12345"); mEditor.commit(); } }
Activity B:
public class MainActivity extends Activity { private static final String TAG = "B"; Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button get = (Button)findViewById(R.id.get); get.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { getSharedPreference(); } }); Button set = (Button)findViewById(R.id.set); set.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setSharedPreference(); } }); } private void getSharedPreference(){ try { mContext = createPackageContext("com.shift.sharepreferencea", CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } SharedPreferences mShare = mContext.getSharedPreferences("test_share", Context.MODE_WORLD_READABLE); Log.d(TAG, "======"+mShare.getString("key", "error")); } private void setSharedPreference(){ try { mContext = createPackageContext("com.shift.sharepreferencea", CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } SharedPreferences mShare = mContext.getSharedPreferences("test_share", Context.MODE_WORLD_WRITEABLE); Editor mEditor = mShare.edit(); mEditor.putString("key", "hehe"); mEditor.commit(); } }
虽然通过以下code能获取到对应的对象,但是a中的mode设置的为Context.MODE_PRIVATE
会提示一个错误:Couldn't rename file /data/data/....PREFERENCES_NAME.XML to /data/data/....PREFERENCES_NAME.XML.bak
try { mContext = createPackageContext("com.shift.sharepreferencea", CONTEXT_IGNORE_SECURITY); } catch (NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } SharedPreferences mShare = mContext.getSharedPreferences("test_share", Context.MODE_WORLD_READABLE);
但是是否改成Context.MODE_WORLD_WRITEABLE或者是Context.MODE_WORLD_READABLE就可以了呢?
答案是不行,所以这一步是走不通的。
经过研究发现只要将android:sharedUserId="com.shift.test"两个进程设置为一样的就可以了,而且mode设为任何一个都是ok的。
相关文章推荐
- Android中SharedPreference多进程数据共享出错
- Android进程间共享数据之SharedPreference
- android 利用SharedPreferences 在不同应用之间共享数据
- Android中SharedPreference多进程数据共享出错
- 相同程序不同进程下实现数据共享
- 0907使用write函数向共享内存中写入数据,实现不同进程间的数据信息传递
- Android中SharedPreference多进程数据共享出错
- 不同进程通过共享内存实现数据共享
- android SharedPreferences 多进程间数据共享
- Android通过sharedUserId实现不同APK数据共享
- Android之用sharedUserId来实现不同应用(APK)数据共享
- Android通过sharedUserId机制实现APK间共享数据,App的换肤可以通过此机制实现
- 通过内存映射文件实现进程间数据共享
- 使用servlet实现同一用户的不同页面共享数据
- linux 共享内存shm_open实现进程间大数据交互
- 【Android】数据共享 sharedPreferences 相关注意事项
- Python通过Manager方式实现多个无关联进程共享数据
- 【Demo 0115】内存映射方式实现进程间数据共享
- android sharedUserId实现跨Apk的数据共享
- 共享内存实现进程间大数据的交换