Android 共享引用不';t在软件包之间工作(在一个应用程序内)

Android 共享引用不';t在软件包之间工作(在一个应用程序内),android,sharedpreferences,Android,Sharedpreferences,我有一个包含两个软件包的应用程序。在包com.soul.app1.plugin中有一个FireReceiver.class(这是Tasker插件的一部分)。值存储良好,但仅在我第一次运行它时(重新安装后)才正确检索(在第二个包-Settings.class中)。当我再次尝试检索它时,将检索旧值而不是新值 com.soul.app1包中的Settings.java: public class Settings extends Activity { @Override publi

我有一个包含两个软件包的应用程序。在包com.soul.app1.plugin中有一个FireReceiver.class(这是Tasker插件的一部分)。值存储良好,但仅在我第一次运行它时(重新安装后)才正确检索(在第二个包-Settings.class中)。当我再次尝试检索它时,将检索旧值而不是新值

com.soul.app1包中的Settings.java:

public class Settings extends Activity  {

    @Override
    public void onResume()  {
    super.onResume();

     SharedPreferences settings = getApplicationContext().getSharedPreferences("SETTINGS", 0);
     int minVolSet = settings.getInt("value", 0);   
    }

}
com.soul.app1.plugin包中的FireReceiver.java:

public final class FireReceiver extends BroadcastReceiver
{

   @Override
   public void onReceive(final Context context, final Intent intent)
   {
     SharedPreferences.Editor editor;
     SharedPreferences settings;
    settings = context.getApplicationContext().getSharedPreferences("SETTINGS", 0);
    editor = settings.edit();

    editor.putInt("value", 2); // constant 2 is for testing purposes only
    editor.apply();
   }
}

在这里,您需要在应用新值后提交编辑器

SharedPreferences.Editor editor;
     SharedPreferences settings;
    settings = context.getApplicationContext().getSharedPreferences("SETTINGS", 0);
    editor = settings.edit();

    editor.putInt("value", 2); // constant 2 is for testing purposes only
    editor.commit()

对于在共享首选项中编辑,需要提交()。

最后,我通过将
getSharedReferences()
切换到
模式\u多进程
解决了这个问题。因此:


理解这一点的关键是,每个软件包(即使在同一个应用程序中)都有自己的流程。我找不到这些信息,所以我必须自己学习:)。

应用()的作用与此完全相同。正如我所说,“value”存储正确(我已经检查过了),apply()的作用完全相同。正如我所说,“值”存储正确(我已经检查过了)。因此,当您重新安装应用程序时。首选项被清除,默认值被返回。你每次都将值设置为2,那么我们如何验证新值呢?我正在通过seekBar更改值,但为了本文的目的,我简化了代码。我认为问题可能是因为我在包之间工作。请确保您从seekbar获得正确的值。由于首选项代码看起来不错,而且我确信它与软件包没有任何问题,通常应用程序的所有组件都将在单个进程中运行,除非另有要求。然而,当涉及多个线程时,类似的因素可能是一个问题,文档忽略了这一点。
getSharedPreferences("SETTINGS", 0);
getSharedPreferences("SETTINGS", 4);