Android ‘Handler()‘ is deprecated

发布时间 2023-06-28 12:06:02作者: petercao

private Handler handler = new Handler();

Handler() 此构造函数在 Android 11 /R 之后已弃用。

在 Handler 构造期间隐式选择 Looper 会导致操作无声地丢失(如果 Handler 不期待新任务并退出)、崩溃(如果有时在没有 Looper 活动的线程上创建处理程序)或竞争条件,处理程序关联的线程不是作者预期的。

相反,使用 Executor 或 显式指定 Looper,使用 Looper#getMainLooper {link android.view.View#getHandler} 或类似方法。如果为了兼容性需要隐式线程本地行为,请使用 new Handler(Looper.myLooper())。

 

解决

1、添加 Looper.getMainLooper() 或 Looper.myLooper() 方法。

private final Handler handler = new Handler(Looper.getMainLooper());
private final Handler handler = new Handler(Looper.myLooper());

 

new Handler() 变更为 new Handler(Looper.myLooper())
new Handler(Handler.Callback callback) 变更为 new Handler(Looper.myLooper(), callback


refs:
官方API:链接

https://stackoverflow.com/questions/61023968/what-do-i-use-now-that-handler-is-deprecated