我正在使用SharedPreferences
来存储我的数据。当我的应用程序运行时,数据已成功保存到SharedPreferences
,但当我关闭我的应用程序并尝试通过Intent Service
保存数据时,没有任何反应。没有数据保存到它:
public class TinyDB {
private SharedPreferences preferences;
private String DEFAULT_APP_IMAGEDATA_DIRECTORY;
private String lastImagePath = "";
public TinyDB(Context appContext) {
preferences = PreferenceManager.getDefaultSharedPreferences(appContext);
}
public void putString(String key, String value) {
checkForNullKey(key); checkForNullValue(value);
preferences.edit().putString(key, value).apply();
}
}
我在onMessageReceive()
public void onMessageReceived(RemoteMessage remoteMessage) {
tinyDb.putString("key","value");
}
我想确保我想在app未运行时保存价值的要点。当应用程序运行时,一切都很好。
我也想知道什么类或Activity最适合初始化TinyDB的对象,我应该将它设为静态?
答案 0 :(得分:0)
您可以使用服务的上下文在IntentService类中实例化TinyDB的新实例(假设IntentService在与原始Activity相同的进程上运行)。请注意,在执行其所有逻辑之后,IntentService会被其所有资源销毁,因此新的TinyDB也将被销毁。
答案 1 :(得分:0)
尝试
public void onMessageReceived(RemoteMessage remoteMessage) {
// shortcut and valid local variable
Context ctx = getApplicationContext()
// get instance of shared preferences using service/receiver context!
SharedPreferences sp = ctx.getSharedPreferences(preferencesFileName,Context.MODE_PRIVATE);
// save pref value
sp.edit().put(...).commit();
}
* preferenceFileName - 如果默认为 your_packageName + _preferences
ps需要考虑的一些事情:
更多提示:
不存储Context类对象 - 因为它们应该保持短暂状态 - 而不是使用WeakReference
// create if you want to hold context reference
WeakReference<Context> wctx = new WeakReference<Context>(context)
// then get when you want to use context
Context ctx = wctx.get();
if(ctx!=null) // context still alive we can use it