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