星空网 > 软件开发 > 操作系统

Java时间间隔问题在Android中的使用

转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6606720.html

 

假设我们在做项目的时候,获取到了一段音频,也知道音频长度,那么我们想对音频做一些处理的时候,在这个处理动作之前往往要做时间循环判断

已知:音频长度,并且还给出下面四个条件
重试时间长度 = 音频长度 × 0.7 + 30秒
第一次重试: 重试时间长度 x 0.15
第二次重试: 重试时间长度 x 0.5
第三次重试: 重试时间长度 x 1

上述的已知条件我们可以用下面这两段代码来实现:

private int[] getRetryIntervalTimes(final Context context, final int duration) {  // 重试时间长度 = 音频长度 × 0.7 + 30秒  final int retryMaxTime = duration * getResValue(context, 70) / 100 + getResValue(context, 30);  // 第一次重试: 重试时间长度 x 0.15  // 第二次重试: 重试时间长度 x 0.5  // 第三次重试: 重试时间长度 x 1  return new int[]{      0,      (retryMaxTime * getResValue(context, 15) / 100) * 1000,      (retryMaxTime * getResValue(context, 50) / 100) * 1000,      (retryMaxTime * getResValue(context, 100)/ 100) * 1000  };}

private int getResValue(final Context context, final int resId) {  return Integer.parseInt(context.getString(resId));}

执行循环判断,一般都是Retry3次,如果不通过就不执行处理,三次以内,那次执行通过,那次就开始做处理。可以用下面这段代码来实现:

private void initMethod() {  final int[] retryIntervalTimeMillis = getRetryIntervalTimes(getApplicationContext(), 整型音频长度);  final long[] executeTimes = {0, 0, 0, 0};  long startTimeMillis = 0;  // 重试三次  for (int i = 0; i < 4; i++) {    try {      if (i > 0) {        long waitTimeMillis = executeTimes[i] - System.currentTimeMillis();        Date executeTime = new Date(executeTimes[i]);        String planTime = String.format(Locale.CHINESE, "%tF|%tT.%tL", executeTime, executeTime, executeTime);        Log.d("", "<" + i + "> Plan: " + planTime + ", Wait: " + (waitTimeMillis > 0 ? waitTimeMillis : 0) + "ms");        if (waitTimeMillis > 0) {          Thread.sleep(waitTimeMillis);        }      }      startTimeMillis = System.currentTimeMillis();    } catch (InterruptedException e) {      e.printStackTrace();    } finally {      if (i == 0) {        // 重试时间起点 = 首次完成时间确认        final long retryStartTimeMillis = System.currentTimeMillis();        // 重试计划开始时间 = 重试时间起点 + 重试各次间隔时间        executeTimes[1] = retryStartTimeMillis + retryIntervalTimeMillis[1];        executeTimes[2] = retryStartTimeMillis + retryIntervalTimeMillis[2];        executeTimes[3] = retryStartTimeMillis + retryIntervalTimeMillis[3];      }      Log.d("", "<" + i + "> [FINISH]. process time: " + (System.currentTimeMillis() - startTimeMillis) + "ms");    }  }}

以上就是Java时间间隔问题在Android中的使用。

 

关注我的新浪微博,获取更多Android开发资讯!

关注科技评论家,领略科技、创新、教育以及最大化人类智慧与想象力!




原标题:Java时间间隔问题在Android中的使用

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

Temu登顶2023年美国APP Store应用下载榜:https://www.kjdsnews.com/a/1688157.html
喜茶美国首店正式开业!首日销量超2500杯:https://www.kjdsnews.com/a/1688158.html
TikTok上大卖的亚马逊爆款:https://www.kjdsnews.com/a/1688159.html
UPS重金投资香港Hub,亚太电商势头良好:https://www.kjdsnews.com/a/1688160.html
一篇文章带你了解商标注册:冰岛:https://www.kjdsnews.com/a/1688161.html
除谷歌外,试试这些搜索引擎开发海外客户!:https://www.kjdsnews.com/a/1688162.html
大同旅游攻略一日游 山西大同一日游旅游景点有哪些:https://www.vstour.cn/a/408251.html
如何从帽儿山到哈尔滨火车站(详细交通路线及注意事项):https://www.vstour.cn/a/408252.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流