Android移动开发入门遇到Handler()构造方法废弃问题,求实现指导
问题解决步骤
1、报错原因
Android 11(API Level 30)开始,Handler()无参构造方法被官方废弃,原无参构造会默认绑定当前线程的Looper,存在隐式内存泄漏风险,官方要求必须显式传入指定的Looper对象。
2、具体修改方案
你找到的解决方案完全适用,仅需修改MainActivity.java中的两处代码即可:
第一步:添加Looper依赖导入
在MainActivity的导入区新增一行导入声明:
import android.os.Looper;
第二步:修改Handler初始化代码
找到原有Handler声明行:
private Handler handler = new Handler();
替换为:
private Handler handler = new Handler(Looper.getMainLooper());
3、后续说明
- 其余所有代码无需修改,
handler.postDelayed()、handler.removeCallbacks()等原有方法调用逻辑完全不变,可正常运行。 - 此处传入
Looper.getMainLooper()表示将Handler绑定到安卓主线程,完全符合你播放进度条更新UI的场景需求,修改后废弃警告会直接消失。
额外注意:你当前代码里MediaPlayer设置的数据源是YouTube网页链接,MediaPlayer无法直接解析该链接获取音频流,后续测试播放功能时需要替换为直接指向音频文件的直链地址。
内容的提问来源于stack exchange,提问作者Deyvison Cruz
相关产品推荐
相关产品推荐

