一、问题
private Handler handler = new Handler();
二、解决
1、添加 Looper.getMainLooper() 或 Looper.myLooper() 方法。
private final Handler handler = new Handler(Looper.getMainLooper());
private final Handler handler = new Handler(Looper.myLooper());
三、解析
1、Handler() 此构造函数已弃用。在 Handler 构造期间隐式选择 Looper 会导致操作无声地丢失(如果 Handler 不期待新任务并退出)、崩溃(如果有时在没有 Looper 活动的线程上创建处理程序)或竞争条件,处理程序关联的线程不是作者预期的。相反,使用 Executor 或 显式指定 Looper,使用 Looper#getMainLooper {link android.view.View#getHandler} 或类似方法。如果为了兼容性需要隐式线程本地行为,请使用 new Handler(Looper.myLooper())。
四、链接
1、官方API:链接。
本文详细介绍了在Android开发中遇到Handler构造函数弃用的问题及其解决方案。通过添加Looper.getMainLooper()或Looper.myLooper(),可以确保Handler在正确的线程中运行。同时,解释了Looper的作用,强调了避免隐式线程本地行为的重要性,以防止潜在的程序错误和竞争条件。
1707

被折叠的 条评论
为什么被折叠?



