Java时间间隔问题在Android中的使用
Posted Tyhoo Wu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中的使用的主要内容,如果未能解决你的问题,请参考以下文章
Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.(代码片
Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.(代码片
Android Studio编译OsmAnd出现警告:GeoPointParserUtil.java使用或覆盖了已过时的 API。有关详细信息请使用-Xlint:deprecation重新编译(代码片
Android 返回堆栈管理打印 Android 中当前运行的 Activity 任务栈信息 | Activity 任务栈信息分析 | Activity 在相同 Stack 中的不同 Task(代码片
Android Parcelable反序列化报错笔记:java.lang.RuntimeException: Unmarshalling unknown type code at offset(代码片