BroadcastReceiver中的Android SharedReferences值未更新
我创建了一个名为ALARM的SharedReferences,其映射名为(“ALARM”,boolean),(“ALARM,boolean”)的布尔值在MainActivity中不时更改,并在BroadcastReceiver中接收 问题是:当我不时更改MainActivity中的值时,BroadcastReceiver只更改一次。我的代码怎么了 在下面的代码中,start()与按钮对齐,单击时,将boolean更改为true。我也可以在BroadcastReceiver中看到接收到的真实值。但是,我单击了stop(),将MainActivity中的布尔值更改为false,但仍然可以在BroadcastReceiver中看到接收到的真值。 若我先单击stop(),那个么我总是在BroadcastReceiver中看到false值。(即使我多次单击start()) 谢谢 主要活动:BroadcastReceiver中的Android SharedReferences值未更新,android,sharedpreferences,android-broadcastreceiver,Android,Sharedpreferences,Android Broadcastreceiver,我创建了一个名为ALARM的SharedReferences,其映射名为(“ALARM”,boolean),(“ALARM,boolean”)的布尔值在MainActivity中不时更改,并在BroadcastReceiver中接收 问题是:当我不时更改MainActivity中的值时,BroadcastReceiver只更改一次。我的代码怎么了 在下面的代码中,start()与按钮对齐,单击时,将boolean更改为true。我也可以在BroadcastReceiver中看到接收到的真实值。但
public class MainActivity extends AppCompatActivity {
SharedPreferences ALARM;
SharedPreferences.Editor editorALARM;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ALARM = getSharedPreferences("ALARM", MODE_PRIVATE);
editorALARM = ALARM.edit();
}
// start data service
public void start(View view) {
editorALARM.putBoolean("alarm", true).apply();
Log.e("start",""+ALARM.getBoolean("alarm", false));
Intent intent = new Intent();
intent.setAction("xxx.ALARM");
sendBroadcast(intent);
}
// stop data service
public void stop(View view) {
editorALARM.putBoolean("alarm", false).apply();
Log.e("stop",""+ALARM.getBoolean("alarm", true));
Intent intent = new Intent();
intent.setAction("xxx.ALARM");
sendBroadcast(intent);
}
}
广播接收机:
public class Receiver extends BroadcastReceiver {
SharedPreferences ALARM;
@Override
public void onReceive(Context context, Intent intent) {
ALARM = context.getSharedPreferences("ALARM", Activity.MODE_PRIVATE);
Log.e("actual",""+ALARM.getBoolean("alarm", false));
}
}
替换-
editorALARM.putBoolean("alarm", true).apply();
与-
将对您起作用这是由于删除manifests.xml中的android:process=“:remote”所致。我得到了正确的布尔值。apply()以异步方式工作,尝试commit(),而不是只是好奇地想知道,提到“:remote”如何影响SharedReferences的保存行为?在google之后,我认为它与w/:remote=工作线程和w/o=UI线程有关。谢谢!这完全有道理,因为SharedReference只能通过UI线程更新。但是,在UI以外的线程中,我希望app crash.crash会更好。不幸的是,在非UI线程上什么也没有发生。这可能会使调试工作更加复杂。
editorALARM.putBoolean("alarm", true).commit();