亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Java时间间隔问题在Android中的使用相关的知识,希望能为你提供帮助。
转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6606720.html
【Java时间间隔问题在Android中的使用】假设我们在做项目的时候,获取到了一段音频,也知道音频长度,那么我们想对音频做一些处理的时候,在这个处理动作之前往往要做时间循环判断
已知:音频长度,并且还给出下面四个条件
重试时间长度 = 音频长度 × 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开发资讯!
关注科技评论家,领略科技、创新、教育以及最大化人类智慧与想象力!
推荐阅读
- skr怎样读?SKR是啥意思?
- android classloader双亲委托模式
- Android 应用开发-从设计到实现 3-4 静态原型的状态栏
- Android 5.0及以上版本使用webview不能使用Cookies解决方案
- android在service中使用AsyncHttpClient加载网络资源
- 安卓开源项目周报0322
- 生活娱乐 如何在安卓智能电视上安装自定义软件
- android 再按一次退出(笔记)
- eclipse安装Android模拟器