如何修复此代码中的弃用警告?或者,还有其他选择吗?
Handler().postDelayed({
context?.let {
//code
}
}, 3000)
Run Code Online (Sandbox Code Playgroud) 我用这个函数来延迟notifyDatasetChanged()函数。
Handler().postDelayed({
notifyDataSetChanged()
}, 100)
Run Code Online (Sandbox Code Playgroud)
Handler().postDelayed现已弃用。调用什么函数呢?
在文档中,谷歌说:
该构造函数已被弃用。在 Handler 构造期间隐式选择 Looper 可能会导致错误,其中操作会默默丢失(如果 Handler 不期待新任务并退出)、崩溃(如果有时在没有 Looper 活动的线程上创建处理程序)或竞争条件,处理程序所关联的线程不是作者所预期的。相反,使用 Executor 或使用 Looper#getMainLooper、{link android.view.View#getHandler} 或类似方法显式指定 Looper。如果为了兼容性需要隐式线程本地行为,请使用 new Handler(Looper.myLooper(),callback) 来让读者清楚。
但我是初学者,英语说得不够好,我不明白是否有其他选择可以替代handler()。
Android:我在我的活动中定义了一个Handler类,我得到警告"Handler类应该是静态的,否则可能会发生泄漏",代码如下:
Handler messageHandler = new Handler() {
// @Override
public void handleMessage(Message msg) {
try {
... accessing variables defined at the activity level
... doing something very important
}
super.handleMessage(msg)
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是我的消息处理程序有对主要活动变量的引用,所以我不能使它成为静态的.在我的情况下,如何摆脱这种警告(以正确的方式)?