龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 移动开发 > Android开发 >

Android Wear计时器开发(2)

时间:2014-11-29 02:49来源:网络整理 作者:网络 点击:
分享到:
这些都是基本的java代码,就不费时间讲了。下面的函数更高级一些,可以操作计时器的状态。 public final class MatchTimer { . . . public void start() { if (end 0) { st

这些都是基本的java代码,就不费时间讲了。下面的函数更高级一些,可以操作计时器的状态。

 
  public final class MatchTimer {
  .
  .
  .
  public void start() {
    if (end > 0) {
      start = System.currentTimeMillis() - (end - start);
      end = 0;
    } else {
      start = System.currentTimeMillis();
    }
    save();
  }
 
  public void stop() {
    if (isPaused()) {
      resume();
    }
    end = System.currentTimeMillis();
    save();
  }
 
  public void pause() {
    currentStoppage = System.currentTimeMillis();
    save();
  }
 
  public void resume() {
    totalStoppages += System.currentTimeMillis() - currentStoppage;
    currentStoppage = 0L;
    save();
  }
 
  public void reset() {
    resetWithoutSave();
    save();
  }
 
  private void resetWithoutSave() {
    start = 0L;
    currentStoppage = 0L;
    totalStoppages = 0L;
    end = 0L;
  }
  }
 

这些还是基本的Java代码,也可以不用讲了。只有save()方法我们还没有见到,这是在类的最后写的,这个函数才值得的我们讲讲。

前一篇文章我们讨论了关于唤醒机制的问题,我们不需要去维持一个长连接或者后台服务,只需要维持这几个计时器的状态就可以了。我们使用SharedPreference来实现:

 
  public final class MatchTimer implements SharedPreferences.OnSharedPreferenceChangeListener {
  private static final String KEY_START = "com.stylingandroid.matchtimer.KEY_START";
  private static final String KEY_CURRENT_STOPPAGE = "com.stylingandroid.matchtimer.KEY_CURRENT_STOPPAGE";
  private static final String KEY_TOTAL_STOPPAGES = "com.stylingandroid.matchtimer.KEY_TOTAL_STOPPAGES";
  private static final String KEY_END = "com.stylingandroid.matchtimer.KEY_END";
  private static final String PREFERENCES = "MatchTimer";
 
  private final SharedPreferences preferences;
 
  public static MatchTimer newInstance(Context context) {
    SharedPreferences preferences = context.getSharedPreferences(PREFERENCES, Context.MODE_PRIVATE);
    long start = preferences.getLong(KEY_START, 0);
    long currentStoppage = preferences.getLong(KEY_CURRENT_STOPPAGE, 0);
    long totalStoppages = preferences.getLong(KEY_TOTAL_STOPPAGES, 0);
    long end = preferences.getLong(KEY_END, 0);
    return new MatchTimer(preferences, start, currentStoppage, totalStoppages, end);
  }
 
  private MatchTimer(SharedPreferences preferences, long start, long currentStoppage, long totalStoppages, long end) {
    this.preferences = preferences;
    this.start = start;
    this.currentStoppage = currentStoppage;
    this.totalStoppages = totalStoppages;
    this.end = end;
  }
 
  public void save() {
    preferences.edit()
        .putLong(KEY_START, start)
        .putLong(KEY_CURRENT_STOPPAGE, currentStoppage)
        .putLong(KEY_TOTAL_STOPPAGES, totalStoppages)
        .putLong(KEY_END, end)
        .apply();
  }
 
  public void registerForUpdates() {
    preferences.registerOnSharedPreferenceChangeListener(this);
  }
 
  public void unregisterForUpdates() {
    preferences.unregisterOnSharedPreferenceChangeListener(this);
  }
 
  @Override
  public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    long value = sharedPreferences.getLong(key, 0L);
    if (key.equals(KEY_START)) {
      start = value;
    } else if (key.equals(KEY_END)) {
      end = value;
    } else if (key.equals(KEY_CURRENT_STOPPAGE)) {
      currentStoppage = value;
    } else if (key.equals(KEY_TOTAL_STOPPAGES)) {
      totalStoppages = value;
    }
  }
  .
  .
  .
}
 
收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接