转载请注明出处: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中的使用的更多相关文章

  1. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  2. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug

    由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...

  3. Java乔晓松-android中上传图片到服务器Tomcat(Struts2)

    在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片 android客户端上传图片部分的代码如下: package com.exampl ...

  4. Java反射及其在Android中的应用学习总结

    一. Java反射机制 Reflection 是Java被视为动态(或准动态)语言的一个关键性质.这个机制同意程序在执行时透过Reflection APIs取得不论什么一个已知名称的class的内部信 ...

  5. Java乔晓松-android中的帧动画FrameByFrame

    先看效果后上代码: 动画开始---- 动画切换的界面---- 动画播放完毕后的跳转界面----- 重要的方法: imageView.setBackgroundResource(R.anim.frame ...

  6. 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)

    原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...

  7. Android中使用GridView和ImageViewSwitcher实现电子相册简单功能

    我们在手机上查看相册时,首先看到的是网格状的图片展示界面,然后我们选择想要欣赏的照片点击进入,这样就可以全屏观看该照片,并且可以通过左右滑动来切换照片.如下图的显示效果: 首先我们先罗列一下本次实现所 ...

  8. 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错

    在android中下载文件,写好下载文件的代码后需要配置相应的权限 <uses-permission android:name="android.permission.INTERNET ...

  9. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

随机推荐

  1. 训练赛第一场A题 (ZOJ 2313)

    解题报告:n个人围坐成一圈,并且将这n个人从1到n编号,然后编号为1 的人手上有一个物品,将这个物品往向左传递给第k个人,1<=k<=n/2,当这个物品再次传到编号为1 的人的手上时,游戏 ...

  2. DNS域传送漏洞

    nslookup -type=ptr 8.8.8.8             #查询一个IP地址对应的域名 nslookup -type=ns baidu.com         #查询baidu.c ...

  3. aarch64_m3

    mrpt-stereo-camera-calibration-1.4.0-1.fc26.aarch64.rpm 2017-03-17 10:02 143K fedora Mirroring Proje ...

  4. scala下实现actor多线程基础

    package cn.huimin.test import akka.actor._ object NewWrite extends App{ private val system = ActorSy ...

  5. 华夏部分互联网科技公司创始及IPO信息

    时间:2018-04-19 前面整理了一些美国科技公司的信息,这篇文章整理的是我华夏的一些科技公司的信息. 华为.百度.阿里.腾讯.美团.携程.京东.小米.奇虎360……之后,其它一些公司,要么体量 ...

  6. IIS 启用https

    参考:http://www.cnblogs.com/dudu/p/iis_https_ca.html

  7. Win2003不显示移动硬盘、U盘解决方法

    Win2003已经识别出了“移动硬盘”,只是没有分配盘符. 解决方法:插入移动硬盘,右键单击“我的电脑”,选择“管理”,进入“计算机管理”,点击“存储”下面的“磁盘管理”.可以看到现在计算机中有两个磁 ...

  8. .Net程序集强签名详解

    强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...

  9. SCTP客户端与服务器

    /** * @brief - Send a message, using advanced SCTP features * The sctp_sendmsg() function allows you ...

  10. PHP性能调优,PHP慢日志---善用php-fpm的慢执行日志slow log,分析php性能问题

    众所周知,MySQL有slow query log,根据慢查询日志,我们可以知道那些sql语句有性能问题.作为mysql的好搭档,php也有这样的功能.如果你使用php-fpm来管理php的话,你可以 ...