从服务和onResume更新活动会产生不同的结果

时间:2016-03-30 08:51:55

标签: android android-activity android-service

我正在尝试在我的Activity中更新ProgressBar。

我设置了一个BroadcastReceiver来触发更改。

执行活动实际更改的功能:

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);
}

我从我的Application对象发送意图:

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();

从服务调用update时,它显示正确的值,但是当从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是创建活动时的值):

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

在更新活动之前,服务中onSensorChange的值会发生变化:

MainApp.getInstance().daySteps = value;

导致它的原因以及如何在onResume中获取正确的值?

1 个答案:

答案 0 :(得分:0)

很明显发生了什么:

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

您可以在此处看到ServiceActivity在两个单独的进程中运行(在logcat中,第3列包含进程ID和线程ID)。由于您有2个单独的进程,因此您有Application个对象的2个独立实例。