在android中与服务共享数据的方法

在android中与服务共享数据的方法,android,Android,我有一个应用程序,用户将选择他想要的是振动还是静音模式。从主活动中,我将数据作为意图的一部分传递给服务(服务始终在运行) 在onStartCommand服务方法中,我第一次获得数据,一切正常。但是,当我退出应用程序时,一段时间后可能会再次调用服务的onStartCommand方法,但意图中没有数据(可能是Launcher或android操作系统正在这样做) 由于我使用Intent中的数据设置了一个本地字符串变量,所以当操作系统调用onStartCommand方法时,会出现Null异常 @Over

我有一个应用程序,用户将选择他想要的是振动还是静音模式。从主活动中,我将数据作为意图的一部分传递给服务(服务始终在运行)

在onStartCommand服务方法中,我第一次获得数据,一切正常。但是,当我退出应用程序时,一段时间后可能会再次调用服务的onStartCommand方法,但意图中没有数据(可能是Launcher或android操作系统正在这样做)

由于我使用Intent中的数据设置了一个本地字符串变量,所以当操作系统调用onStartCommand方法时,会出现Null异常

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(mode == null) {
        mode = (String) intent.getExtras().get("mode");
    }
    return super.onStartCommand(intent, flags, startId);
}
现在我的问题是如何第一次从活动中获取数据,然后在服务类的各种成员方法中引用它

我曾尝试将模式变量设置为静态变量,但问题是相同的。看起来操作系统将自行卸载服务类,然后重新加载并调用onStartCommand。您必须使用保存变量振动或静默模式的状态。这里有一个可能的解决方案:

    SharedPreferences preferences = getApplicationContext()
            .getSharedPreferences("preferences_name", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("mode", "silent"); // Silent Mode
    // editor.putString("mode", "vibrate"); //Vibrate Mode
    editor.commit();