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

Android中Runnable触发View补间动画无响应问题求助

问题原因

所有和View绘制相关的操作(包括启动动画)都必须在Android主线程(UI线程)执行,你用到的OneShotRunner定时任务默认会在工作线程执行回调,在非UI线程调用startAnimation不会触发动画逻辑,也不会抛出明显报错,就会出现你遇到的回调能正常执行、但动画无响应的情况。

解决方法

把启动动画的逻辑切换到主线程执行即可,修改你的回调代码如下:

OneShotActionCallback animationRunnerCallback = new OneShotActionCallback() {
    @Override
    public void onActionRun() {
        // 切换到主线程执行UI操作
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 先清除上一次残留的动画,避免重复触发冲突
                if (blackSlider.getAnimation() != null) {
                    blackSlider.clearAnimation();
                }
                blackSlider.startAnimation(animation);
            }
        });
    }
};

补充注意点

  • 如果当前代码写在Fragment中,把runOnUiThread替换为requireActivity().runOnUiThread(...)即可
  • 后续需要调整为每小时执行一次的话,把OneShotRunner的间隔参数从5000改为3600 * 1000
  • 如果你的OneShotRunner支持配置回调执行线程,也可以直接配置其在主线程回调,省去手动切换线程的步骤

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:39:04