handler(android.os.handler.callback)已弃用,我应该使用什么替代?
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message message) {
switch(message.what) {
case READ_MESSAGE:
byte[] readBuff = (byte[]) message.obj;
String tempMessage = new String(readBuff, 0, message.arg1);
readMsg.setText(tempMessage);
break;
}
return true;
}
});
1条答案
按热度按时间iecba09b1#
在api级别30中,有2个构造函数已被弃用。
处理程序()
处理程序(handler.callback)
谷歌解释了以下原因。
在处理程序构造期间隐式地选择一个循环器可能会导致错误,其中操作会自动丢失(如果处理程序不需要新任务并退出)、崩溃(如果处理程序有时是在没有活动循环器的线程上创建的)或争用条件,其中处理程序关联的线程不是作者预期的。相反,使用执行器或显式指定循环器,使用looper#getmainlooper、{link android.view.view#gethandler}或类似的方法。如果兼容性需要隐式线程本地行为,请使用新处理程序(looper.mylooper(),callback)向读者说明。
解决方案1:使用执行器
1.在主线程中执行代码。
2.在后台线程中执行代码
注意:使用后请记住关闭执行器。
3.在后台线程中执行代码,并在主线程上更新ui。
解决方案2:使用以下构造函数之一显式指定循环器。
处理程序(活套)
处理程序(looper,handler.callback)
1.在主线程中执行代码
1.1. 带活套的处理器
1.2带循环器和handler.callback的处理程序
2.在后台线程中执行代码
2.1. 带活套的处理器
2.2. 带有循环器和handler.callback的处理程序
注意:使用后记得松开螺纹。
3.在后台线程中执行代码,并在主线程上更新ui。