从服务和 onResume 更新 activity 给出不同的结果
Updating activity from service and onResume gives different results
我正在尝试更新 Activity 中的 ProgressBar。
我设置了一个 BroadcastReceiver 来触发更改。
在 activity 中进行实际更改的函数:
private void updateStepProgress(Intent intent){
int steps = intent.getIntExtra(Keys.EXTRA_STEPS, MainApp.getInstance().daySteps);
ProgressBar progress = (ProgressBar) findViewById(R.id.progressBar);
Log.d("STEP_UPDATE_ACTIVITY", steps+"");
progress.setProgress(steps);
}
我正在从我的应用程序对象发送意图:
public void updateSteps(){
Intent intent = new Intent(StepCounterManager.UPDATE_STEP_UI_EVENT);
intent.putExtra(Keys.EXTRA_STEPS, daySteps);
Log.d("STEP_UPDATE_MAIN", daySteps+"");
sendBroadcast(intent);
}
我这样调用更新:
MainApp.getInstance().updateSteps();
从服务调用更新时,它显示正确的值,但从 Activity 的 onResume 调用它时,它显示 Activity 首次创建时的值.
来自服务的日志(正确值):
03-30 11:43:10.243 24523-24523/ee.greaton.tervis:StepServiceLock D/STEP_UPDATE_MAIN: 1255
03-30 11:43:10.248 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1255
03-30 11:43:10.442 24523-24523/ee.greaton.tervis:StepServiceLock D/STEP_UPDATE_MAIN: 1256
03-30 11:43:10.448 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1256
之后 onResume 的日志(1245 是创建 Activity 时的值):
03-30 11:43:12.049 24468-24468/ee.greaton.tervis D/STEP_UPDATE_MAIN: 1245
03-30 11:43:12.074 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1245
在更新 Activity 之前,服务中的 onSensorChange 值发生变化:
MainApp.getInstance().daySteps = value;
是什么原因造成的以及如何在 onResume 中获得正确的值?
很清楚发生了什么:
03-30 11:43:10.442 24523-24523/ee.greaton.tervis:StepServiceLock D/STEP_UPDATE_MAIN: 1256
03-30 11:43:10.448 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1256
您可以在这里看到 Service
和 Activity
在 2 个独立的进程中 运行(在 logcat 中,第 3 列包含进程 ID 和线程 ID)。由于您有 2 个独立的进程,因此您有 2 个独立的 Application
对象实例。
我正在尝试更新 Activity 中的 ProgressBar。
我设置了一个 BroadcastReceiver 来触发更改。
在 activity 中进行实际更改的函数:
private void updateStepProgress(Intent intent){
int steps = intent.getIntExtra(Keys.EXTRA_STEPS, MainApp.getInstance().daySteps);
ProgressBar progress = (ProgressBar) findViewById(R.id.progressBar);
Log.d("STEP_UPDATE_ACTIVITY", steps+"");
progress.setProgress(steps);
}
我正在从我的应用程序对象发送意图:
public void updateSteps(){
Intent intent = new Intent(StepCounterManager.UPDATE_STEP_UI_EVENT);
intent.putExtra(Keys.EXTRA_STEPS, daySteps);
Log.d("STEP_UPDATE_MAIN", daySteps+"");
sendBroadcast(intent);
}
我这样调用更新:
MainApp.getInstance().updateSteps();
从服务调用更新时,它显示正确的值,但从 Activity 的 onResume 调用它时,它显示 Activity 首次创建时的值.
来自服务的日志(正确值):
03-30 11:43:10.243 24523-24523/ee.greaton.tervis:StepServiceLock D/STEP_UPDATE_MAIN: 1255
03-30 11:43:10.248 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1255
03-30 11:43:10.442 24523-24523/ee.greaton.tervis:StepServiceLock D/STEP_UPDATE_MAIN: 1256
03-30 11:43:10.448 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1256
之后 onResume 的日志(1245 是创建 Activity 时的值):
03-30 11:43:12.049 24468-24468/ee.greaton.tervis D/STEP_UPDATE_MAIN: 1245
03-30 11:43:12.074 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1245
在更新 Activity 之前,服务中的 onSensorChange 值发生变化:
MainApp.getInstance().daySteps = value;
是什么原因造成的以及如何在 onResume 中获得正确的值?
很清楚发生了什么:
03-30 11:43:10.442 24523-24523/ee.greaton.tervis:StepServiceLock D/STEP_UPDATE_MAIN: 1256
03-30 11:43:10.448 24468-24468/ee.greaton.tervis D/STEP_UPDATE_ACTIVITY: 1256
您可以在这里看到 Service
和 Activity
在 2 个独立的进程中 运行(在 logcat 中,第 3 列包含进程 ID 和线程 ID)。由于您有 2 个独立的进程,因此您有 2 个独立的 Application
对象实例。