Newer
Older
RxSprout / app / src / main / java / framework / gameMain / RealTimeActivity.java
package framework.gameMain;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.example.sprout.refactor.activity.BaseActivity;

import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public abstract class RealTimeActivity extends BaseActivity implements Runnable {
    //インターバル確認用変数
    private long interval = 15L;
    private long prevTime = 0L;

    ScheduledFuture<?> future = null;
    private ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(1);
    private boolean fixedInterval;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    protected void start(long interval) {
        this.interval = interval;
        this.fixedInterval = false;
        future = schedule.scheduleWithFixedDelay(this, interval, interval, TimeUnit.MILLISECONDS);
    }

    protected void start(long delay, long interval) {
        this.interval = interval;
        this.fixedInterval = false;
        future = schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
    }

    protected void start(long delay, long interval, boolean fixedInterval) {
        this.interval = interval;
        this.fixedInterval = fixedInterval;
        future = schedule.scheduleWithFixedDelay(this, delay, interval, TimeUnit.MILLISECONDS);
    }

    protected void stop() {
        future.cancel(true);
        future = null;
    }

    //繰り返し実行される部分
    public void run() {
        long interval;
        if (prevTime == 0L || fixedInterval) {
            interval = this.interval;
            prevTime = System.currentTimeMillis();
        } else {
            long curTime = System.currentTimeMillis();
            interval = curTime - prevTime;
            prevTime = curTime;
        }
        update(interval);
    }

    //intervalミリ秒のインターバルをおいて定期実行
    protected abstract void update(long interval);
}