在android开发中如果执行某个操作没有成功,最多重试执行10次,每次间隔1秒(UI线程需要注意间隔时间不要超过5秒否则会报ARN),如何实现?最近在了解CarService代码发现了一段很好用的代码,分享一下:

import android.util.Log;import static android.os.SystemClock.elapsedRealtime;/** * @author: ql * @date: 2020/3/19 * @desc: 重试执行 */public class TryAgain {    /**     * 执行动作     */    interface RetriableCallback {        /**         * Returns {@link StatusCode}         */        int action();    }    /**     * 重试执行     * @param callback  要执行的动作     * @param timeoutMs 超时时长(重试最长时间)     * @param sleepMs   休眠时间(重试间隔)     * @return 状态码 {@link StatusCode}     */    public static int invokeRetriable(RetriableCallback callback, long timeoutMs, long sleepMs) {        int status = callback.action();        long startTime = elapsedRealtime();        while (StatusCode.TRY_AGAIN == status && (elapsedRealtime() - startTime) < timeoutMs) {            try {                Thread.sleep(sleepMs);            } catch (InterruptedException e) {                Log.e("TryAgain", "Thread interrupted ", e);                break;            }            status = callback.action();        }        return status;    }    /**     * 状态码     */    public static class StatusCode {        public static int TRY_AGAIN = 0;        public static int OK = 1;    }}

测试执行5次结束

TryAgain.invokeRetriable(new TryAgain.RetriableCallback() {                    @Override                    public int action() {                        i++;                        if (i == 5) {                            Log.d("TryAgain", "执行成功");                            return TryAgain.StatusCode.OK;                        } else {                            Log.d("TryAgain", "重试执行" + i);                            return TryAgain.StatusCode.TRY_AGAIN;                        }                    }                }, 10 * 1000, 1000);

结果

2019-12-31 02:10:22.724 5791-5791/com.hozon.dmsservicetest D/TryAgain: 重试执行12019-12-31 02:10:23.724 5791-5791/com.hozon.dmsservicetest D/TryAgain: 重试执行22019-12-31 02:10:24.725 5791-5791/com.hozon.dmsservicetest D/TryAgain: 重试执行32019-12-31 02:10:25.725 5791-5791/com.hozon.dmsservicetest D/TryAgain: 重试执行42019-12-31 02:10:26.725 5791-5791/com.hozon.dmsservicetest D/TryAgain: 执行成功

更多相关文章

  1. Android(安卓)Espresso
  2. Android(安卓)Studio报错 程序包android.support.annotation不存
  3. Android(安卓)APK反编译工具介绍
  4. Android(安卓)全局异常捕获DefaultUncaughtExceptionHandler与Co
  5. Button控件
  6. 正在学习 android 开发,开发环境已搭建完毕,第一个测试程序已在模
  7. android 新浪微博认证
  8. android定时器Timer与TimerTask
  9. android singleTask使用情况,场景分析

随机推荐

  1. Android(安卓)Textview实现文字颜色渐变
  2. Android:RxJava
  3. Android(安卓)如何获取系统字体大小
  4. Android(安卓)图片加边框
  5. android 读取网络在传输数据时的状态
  6. Android(安卓)service实例
  7. Android创建和配置布局动画
  8. Android 三星手机不能调起应用市场
  9. Android自定义对话框
  10. android SurfaceView 绘图