- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我构建了一个自定义 View ,并在其构造函数中使用 postDelay()
使用 glide 更新 ImageView
postDelayed(new Runnable() {
@Override
public void run() {
Glide.with(getContext())
.load("url").asBitmap()
.into(new SimpleTarget<Bitmap>(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
Drawable drawable = new BitmapDrawable(resource);
setBackground(drawable);
}
});
}
},5000);
如果用户点击返回并且 Activity 被破坏,那么 Glide 将使应用程序崩溃(Glide 检查 Activity 是否仍然有效)我将清理处理程序中的所有消息。
所以在 onDetachedFromWindow()
方法中:
@Override
protected void onDetachedFromWindow() {
getHandler().removeCallbacksAndMessages(null);
super.onDetachedFromWindow();
}
但问题是即使我快速单击后退按钮(1 -2 秒),我 postDelay()
仍然会被解雇。
有什么理由吗?
谢谢
最佳答案
View#postDelayed
的来源:
public boolean postDelayed(Runnable action, long delayMillis) {
final AttachInfo attachInfo = mAttachInfo;
if (attachInfo != null) {
return attachInfo.mHandler.postDelayed(action, delayMillis);
}
// Assume that post will succeed later
ViewRootImpl.getRunQueue().postDelayed(action, delayMillis);
return true;
}
此 AttachInfo
是在构造函数之后发生的 dispatchAttachedToWindow
上分配的。这意味着构造函数中的任务被分配给 ViewRoot 运行队列。在 onDetachedFromWindow
上,您只是尝试从错误的队列中删除。
解决方案 - 只需将此 postDelayed
调用移至 onAttachedToWindow()
关于java - getHandler().removeCallbacksAndMessages(null) 在自定义 View 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42433075/
我已经实现了一项以自定义时间间隔循环更新 UI 的服务。更改更新间隔时,我想停止当前处理程序并以新间隔重新开始。正如我之前在其他线程中读到的那样,在处理程序被触发后,不可能中断它。但是提到的解决方案,
我的应用程序有一个注册 ScreenStateReceiver 的服务,它会在屏幕打开时创建一个处理程序,并在屏幕关闭时删除它。 我的问题是 handler.removeCallbacksAndMes
我的问题是:我使用 Handler.postDelayed() 在 500 毫秒后运行动画。稍后在代码中我使用 Handler.removeCallbacksAndMessages() 因为有时我想运
在 fragment 的 onDestory 中,我放置了代码来清理我开始使用 Handler.postDelayed 的所有挂起的可运行对象。 mUiHandler.removeCallbacksA
我构建了一个自定义 View ,并在其构造函数中使用 postDelay() 使用 glide 更新 ImageView postDelayed(new Runnable() { @Overr
我正在开发一个 Android 应用程序,并且有一个 Fragment,我在其中每 60 秒发送一个 API 请求。我在此 Fragment 中使用 Handler 以下列方式执行此工作: // Gl
我是一名优秀的程序员,十分优秀!