You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何实现代码每60秒重复执行(关于postDelayed()函数的使用疑问)

求助:如何实现代码每60秒重复执行(关于postDelayed()函数的使用疑问)

嗨,我来帮你搞定这个定时执行的需求,顺便把postDelayed的用法给你讲明白~

首先,postDelayed是Handler类的核心方法,简单说就是让一段代码延迟指定毫秒数后再执行。要实现每60秒重复执行你的代码,关键是在这段代码执行完之后,再次调用postDelayed,形成一个循环触发的逻辑。

结合你给出的代码,我整理了可直接复用的实现方案:

步骤1:定义全局的Handler和Runnable

在你的MainActivity里定义全局的Handler和Runnable实例(别放在方法里当局部变量,不然容易被系统回收导致任务中途失效):

private Handler mConnectionHandler = new Handler();
private Runnable mConnectionCheckTask = new Runnable() {
    @Override
    public void run() {
        // 这里放你要每60秒执行的连接检查代码
        if (App.connection_status == 2) {
            ConnectionTimer.cancel();
            SharedPreferences SharedAppDetails = getSharedPreferences("settings_data", 0);
            SharedPreferences.Editor Editor = SharedAppDetails.edit();
            Editor.putString("connection_time", String.valueOf(App.CountDown));
            Editor.apply();

            if (App.CountDown >= 20) {
                SharedPreferences settings = getSharedPreferences("settings_data", 0);
                String Rate = settings.getString("rate", "false");
                if (Rate.equals("false")) {
                    Intent Servers = new Intent(MainActivity.this, ReviewActivity.class);
                    // 这里补上你原来没写完的逻辑,比如启动Activity:
                    // startActivity(Servers);
                }
            }
        }

        // 重点!执行完当前代码后,再次延迟60秒执行这个任务,形成循环
        mConnectionHandler.postDelayed(this, 60 * 1000); // 60秒 = 60*1000毫秒
    }
};

步骤2:启动定时任务

在合适的时机启动这个循环任务,比如在Activity的onCreate方法里,或者某个用户触发事件(比如按钮点击)里:

// 如果你想立即执行一次,再开始每60秒循环:
mConnectionCheckTask.run(); // 先执行一次
mConnectionHandler.postDelayed(mConnectionCheckTask, 60 * 1000); // 之后每60秒执行一次

// 如果你想第一次也延迟60秒再执行,直接调用下面这行就行:
// mConnectionHandler.postDelayed(mConnectionCheckTask, 60 * 1000);

步骤3:页面销毁时停止任务(必做!)

为了避免内存泄漏,一定要在Activity销毁的时候移除这个定时任务:

@Override
protected void onDestroy() {
    super.onDestroy();
    // 移除所有未执行的回调任务
    mConnectionHandler.removeCallbacks(mConnectionCheckTask);
}

额外说明

  • 全局定义的原因:如果Handler和Runnable是局部变量,当方法执行完后,它们可能会被GC回收,导致定时任务中途停止。
  • postDelayed的第二个参数是延迟的毫秒数,所以60秒就要写成60 * 1000。
  • 如果你的需求是当connection_status不等于2时就停止循环,那可以把postDelayed的调用放到if (App.connection_status == 2)的代码块里,否则保持现在的写法,不管状态如何都继续循环检查。

备注:内容来源于stack exchange,提问作者Kez XI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 03:43:05