本次崩溃是在Android中使用消息传递的机制Handler,并在主线程中构建了Handler的构造函数Handler(),此函数已经弃用,通过调试和定位后确定是由此造成了app崩溃。
解读:
Handler是Android为我们提供的一个消息传递的机制。来帮助我们将子线程的数据传递给主线程,其实,当熟悉了Handler的原理之后我们知道,Handler不仅仅能将子线程的数据传递给主线程,它能实现任意两个线程的数据传递。
安卓官方表示:Handler ()此构造函数已弃用。在 Handler 构造期间隐式选择 Looper 可能会导致操作丢失、崩溃或竞争条件的错误,与处理程序关联的线程不是作者预期的。相反,使用或明确指定 Looper,使用Looper.getMainLooper()。
如果为了兼容性需要隐式线程本地行为,请使用 new Handler(Looper.myLooper())
- new Handler(Looper.myLooper()) 获取当前线程的Looper
- new Handler(Looper.getMainLooper()) 获取主线程的Looper
注:如果是主线程创建handler这两没区别,你要是在子线程里创建handler这两就不一样了。
解决方式:
@SuppressLint("HandlerLeak")
Private Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
try{
super.handleMessage(msg);
switch (msg.what) {
case 0:
}
}catch(Exception e){
}
}
};