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
相关产品推荐
相关产品推荐

