我的应用程序中有一个非常简单的首选项实现。这是我的偏好活动:
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}
每个读取首选项的活动或服务都会这样做:
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
现在,其中一项设置是应用程序连接到的服务器。这是作为非绑定服务实现的,因为即使用户离开应用程序,它也应该保持在线状态。当服务启动 (onStartCommand) 时,将从首选项中读取套接字信息。
问题:更改首选项并重新启动服务后,它仍然具有旧值。
我不明白!请帮忙 :)
这里有更多细节,因为它仍然无法正常工作。我猜我的错误在其他地方......
我的服务如下所示。
public class XMPPService2 extends Service {
SharedPreferences preferences;
public void onCreate() { ... }
public int onStartCommand(Intent intent, int flags, int startId) {
preferences = getSharedPreferences("com.company.appname_preferences.xml", MODE_MULTI_PROCESS);
Log.d(TAG, preferences.getString("server", "DEFAULT")); // this always prints the default value
}
public void onDestroy() { ... }
}
据我所知,我没有更多的事情要做。我也试过
getPreferenceManager().setSharedPreferencesMode(MODE_MULTI_PROCESS);
前
addPreferencesFromResource(R.xml.preferences);
但这没有帮助。
现在,我知道这些方法已被弃用。但是,我必须确保该应用程序可以在平板电脑和 2.3 设备上运行。
我只是想提一下,我对 android 还是新手,也许我误解了一些基本概念。我得到的答案与我的网络研究一致,所以我希望它们是正确的。