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乔晓松-android中调用系统拍照功能并显示拍照的图片
android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...
- Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug
由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...
- Java乔晓松-android中上传图片到服务器Tomcat(Struts2)
在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片 android客户端上传图片部分的代码如下: package com.exampl ...
- Java反射及其在Android中的应用学习总结
一. Java反射机制 Reflection 是Java被视为动态(或准动态)语言的一个关键性质.这个机制同意程序在执行时透过Reflection APIs取得不论什么一个已知名称的class的内部信 ...
- Java乔晓松-android中的帧动画FrameByFrame
先看效果后上代码: 动画开始---- 动画切换的界面---- 动画播放完毕后的跳转界面----- 重要的方法: imageView.setBackgroundResource(R.anim.frame ...
- 【转】Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)
原文网址:http://www.blogjava.net/anchor110/articles/355699.html 1.在工程下新建lib文件夹,将需要的第三方包拷贝进来.2.将引用的第三方包,添 ...
- Android中使用GridView和ImageViewSwitcher实现电子相册简单功能
我们在手机上查看相册时,首先看到的是网格状的图片展示界面,然后我们选择想要欣赏的照片点击进入,这样就可以全屏观看该照片,并且可以通过左右滑动来切换照片.如下图的显示效果: 首先我们先罗列一下本次实现所 ...
- 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错
在android中下载文件,写好下载文件的代码后需要配置相应的权限 <uses-permission android:name="android.permission.INTERNET ...
- 在Android中使用Java 8的lambda表达式
作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...
随机推荐
- 如何定制Gtk版Emacs的Widget外观
当我们使用 xlib 版的Emacs时,可以通过 XResource 定义 Emacs 的菜单 栏.工具条.滚动条的外观. 现在,在Linux上我们大多使用 gtk版的Emacs,是否还有办法定义 E ...
- Kissy && Require
KISSY add(name?,factory?,deps) 函数挂载在全局对象KISSY上,用来定义模块. 一个 JS 文件包含一个add()(这时路径+文件名可以用作模块名),如果一个文件包 ...
- Java编程思想 4th 第3章 操作符
有了数据,还需要进行数据间的运算,因此Java中也有数据间运算的各种符号,书本称之为操作符,正确的翻译应该是运算符. Java中的运算符同C++相同,运算符同运算符对象构成表达式,表达式是运算对象及运 ...
- aarch64_j1
JSCookMenu-2.0.4-13.fc26.noarch.rpm 2017-02-14 07:06 37K fedora Mirroring Project Java-WebSocket-1.3 ...
- MySQL参数设置
InnoDB配置 从MySQL 5.5版本开始,InnoDB就是默认的存储引擎并且它比任何其它存储引擎的使用要多得多.那也是为什么它需要小心配置的原因. 1 innodb_file_per_table ...
- IDL界面程序直接调用envi菜单对应功能
参考自http://blog.sina.com.cn/s/blog_764b1e9d010115qu.html 参考文章的方法是构建一个button控件,通过单击实现,这种方法比较复杂,不是我们经常能 ...
- Python函数:对变量赋值,变量即局部
b = 6 def f2(a): print(a) print(b) b = 9 UnboundLocalError: local variable 'b' referenced before ass ...
- dragstart drag dragend dragenter dragover dragleave drop
dragstart drag dragend dragenter dragover dragleave drop 前端框架层出不穷,网页上的效果越来越绚丽,制作绚丽的效果的成本越来越低,其中有种拖 ...
- Ad Hoc Distributed Queries的启用与关闭
启用Ad Hoc Distributed Queries: exec sp_configure 'show advanced options',1 reconfigure exec sp_config ...
- php中的单引号与双引号详解
一.引号定义字符串 在Php中,通常一个字符串被定义在一对引号中,如: 'I am a string in single quotes'"I am a string in double qu ...