运行 当我回到 activity 时倒计时更快

Running countdown timer faster when i back to activity

我为倒数计时器提供服务,在 activity 中,我每隔几秒放置一个显示时间的文本视图:100 - 0,但是当我离开 activity 并返回时。我认为计时器 运行 非常快,但我想每秒 运行 一次。问题在哪里?

主要活动:

public static final String mBroadcastIntegerAction = "com.example.broadcast.integer";
private IntentFilter mIntentFilter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    showTime = (TextView) findViewById(R.id.textView1); 

    mIntentFilter = new IntentFilter();
    mIntentFilter.addAction(mBroadcastIntegerAction);

    Intent serviceIntent = new Intent(this, AppServiceDay.class);
    startService(serviceIntent);
}

@Override
public void onResume() {
    super.onResume();
    registerReceiver(mReceiver, mIntentFilter); 
}

private BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals(mBroadcastIntegerAction)) {
            int second = intent.getIntExtra("Time", 0);

            showTime.setText("" + second);
        }
    }
};
    @Override
protected void onPause() {
    registerReceiver(mReceiver, mIntentFilter);
//      unregisterReceiver(mReceiver);
    super.onPause();
}

服务:

public class AppServiceDay extends Service {

CountDownTimer cdt;
public static Handler mHandler; 
int downer = 1000;
int time = 100;
int mainTime = 100000;

@Override
public void onCreate() {
    super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    cdt = new CountDownTimer(mainTime, downer) {
        @Override
        public void onTick(long millisUntilFinished) {

            time -= 1;

            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction(MainActivity.mBroadcastIntegerAction);
            broadcastIntent.putExtra("Time", time);
            sendBroadcast(broadcastIntent);
        }

        @Override
        public void onFinish() {
            time = 100;
            this.start();
        }
    };
    cdt.start();

    return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent arg0) {
    return null;
}
}
每次调用 startService 时都会触发

onStartCommand 并且在 onStartCommand 中您正在创建新的 countdown 对象,

在创建新的倒计时对象之前添加空检查,它将同时修复重复的计时器 运行。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    If(cdt == null) {
        cdt = new CountDownTimer(mainTime, downer) {
            @Override
            public void onTick(long millisUntilFinished) {
                time -= 1;
                Intent broadcastIntent = new Intent();
                broadcastIntent.setAction(MainActivity.mBroadcastIntegerAction);

                broadcastIntent.putExtra("Time", time);
                sendBroadcast(broadcastIntent);

            }

            @Override
            public void onFinish() {
                time = 100;
                this.start();
            }
        };
        cdt.start();
    }

    return super.onStartCommand(intent, flags, startId);
}