如何在两个进程之间共享数据

时间:2012-02-07 15:37:00

标签: android google-maps

我使用不同的进程(在我的清单中使用android:process)可以在我的应用程序中使用多个mapView(How to use multiple MapActivities/MapViews per Android application/process)。这两张地图在不同的活动和我的常规tabhost的不同标签中。

否我想缩放到特定位置,该位置是通过其他活动中的用户选择的。使用静态变量并不起作用。之后,我尝试将数据保存到SharedPreferences文件中,然后在MapActivity中再次读取。但这也不起作用。数据已成功写入,但MapActivity在SharedPreferences中找不到任何数据。

是否有可能在两个或更多进程之间共享数据?

保存位置数据:

public static boolean addLocationToShared(float lat, float lon){
    Log.i(TAG, "addLocationToShared: " + lat + "," + lon);
    if(mapShared==null)
        mapShared = TLApplication.getAppContext().getSharedPreferences(MAP_SHARED_PREFS, Context.MODE_PRIVATE);
    return mapShared.edit().putFloat(PREF_LAT, lat).putFloat(PREF_LON, lon).commit();
}

阅读位置数据:

mapShared = TLApplication.getAppContext().getSharedPreferences(MAP_SHARED_PREFS, Context.MODE_PRIVATE);
float lat = mapShared.getFloat(PREF_LAT, 1000);
float lon = mapShared.getFloat(PREF_LON, 1000);
Log.d(TAG, "zoom to " + lat + ", " + lon);
if(lat != 1000 && lon != 1000){
    GeoPoint point = new GeoPoint((int)(lat * 1E6), (int)(lon * 1E6));
    zoomToLocation(point, 15);
}

3 个答案:

答案 0 :(得分:4)

一个简单的方法是SharedPreferences。使用'Context.MODE_MULTI_PROCESS'标志来获取您的共享偏好。

在作家处理中:

SharedPreferences preferencesWriter = basedContext.getSharedPreferences("Keeps_a_constant_preferences_file_name", Context.MODE_MULTI_PROCESS);
preferencesWriter.edit().putString(someKey, savingValue).commit();

在读者过程中:

SharedPreferences preferencesReader = basedContext.getSharedPreferences("Keeps_a_constant_preferences_file_name", Context.MODE_MULTI_PROCESS);
String savedValueInWriterProcess = preferencesWriter.getString(someKey, defaultValue);

注意:在阅读器进程中,您必须每次都检索一个新的SharedPreferences变体,以确保刷新共享值。

其他方法: 1.发送带有额外数据的广播; 2.内容提供商。

答案 1 :(得分:1)

我认为Android Interface Definition Language (AIDL)可能就是你的回答。我用它在应用程序和从单独的apk运行的远程服务之间进行通信。如果您只是传递几个花车,那么编组数据应该不那么复杂。

答案 2 :(得分:0)

我已经尝试过JPriest和NickT的答案,但是他们要么不起作用,要么过多。 我结束了将数据保存到文件中并在其他过程中再次读取它。不是一个非常好的解决方案,但至少它起作用了。