相关疑难解决方法(0)

现在 Handler() 已被弃用,我该使用什么?

如何修复此代码中的弃用警告?或者,还有其他选择吗?

Handler().postDelayed({
    context?.let {
        //code
    }
}, 3000)
Run Code Online (Sandbox Code Playgroud)

java android kotlin android-handler

184
推荐指数
12
解决办法
7万
查看次数

Handler().postDelayed 现已弃用。调用什么函数呢?

我用这个函数来延迟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 kotlin

3
推荐指数
1
解决办法
6436
查看次数

"处理程序类应该是静态的,否则可能会发生泄漏" - 处理程序引用了主要的活动变量

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)

但问题是我的消息处理程序有对主要活动变量的引用,所以我不能使它成为静态的.在我的情况下,如何摆脱这种警告(以正确的方式)?

variables static reference handler android-activity

2
推荐指数
1
解决办法
1385
查看次数