【问题标题】:SharedPreferences does not apply() or commit() inside a service with its own processSharedPreferences 不适用于具有自己进程的服务内部的 apply() 或 commit()
【发布时间】:2014-09-10 14:38:36
【问题描述】:

我有一个Service,它有自己的进程:

<service
    android:name=".services.Commander"
    android:label="@string/commander"
    android:process=":commander_process" >
</service>

在此服务中,使用executeOnExecutor 执行AsyncTask。在其onPostExecute 方法中,我想使用以下代码写入数据:

SharedPreferences prefs = getSharedPreferences("MY_APP_KEY", Context.MODE_PRIVATE);
prefs.edit().putString(Constants.PREF_KEY_APP_PASSWORD, MD5.get(password)).apply();

但是,此代码无效,并且首选项不会更新。我还尝试了commit() 而不是apply(),但它也不起作用。然后我尝试了MODE_MULTI_PROCESS 而不是MODE_PRIVATE

SharedPreferences prefs = getSharedPreferences("MY_APP_KEY", Context.MODE_MULTI_PROCESS);

没用。

我的代码适用于 Android 2.3.6,但不适用于 Android 4.2.2。我该如何解决?

【问题讨论】:

  • SharedPreferences 首选项= PreferenceManager.getDefaultSharedPreferences(MyService.this);这对你有用吗?
  • @IllegalArgument 让我检查一下
  • @IllegalArgument 没用。

标签: android service android-asynctask sharedpreferences


【解决方案1】:

不幸的是,SharedPreferences 不是process-safe,即使在使用MODE_MULTI_PROCESS 之后也是如此。所以我用与我的主要活动相同的过程运行Service,现在它可以正常工作了。我改了manifestxml中的代码:

<service
    android:name=".services.Commander"
    android:label="@string/commander" >
</service>

【讨论】:

    猜你喜欢
    • 2018-05-29
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2021-04-04
    • 2021-01-21
    相关资源
    最近更新 更多