这是一个有毒的方法 onDestory
2018-10-26 本文已影响22人
wan7451
以前从来没有关注过这个方法,直接释放资源,直到今天遇到这个大坑 坑 坑。
image项目中用到了Socket 长连接,一般的操作都是在 Activity 初始化的时候建立连接,销毁的时候断开连接。
今天测试小哥哥突然发现重大Bug:界面拉取不到数据。
通过调试发现是连接一直连接不上。而且,每次打开页面,不是先建立连接,而是先断开连接,然后再进行真正的连接。
经过一通神操作后,发现问题出的 onDestory 方法上。在页面结束的时候,他并没有立刻执行!!
简单处理下,顺利解决问题
@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
destroy();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
destroy();
}
private boolean isDestroyed = false;
private void destroy() {
if (isDestroyed) {
return;
}
// 回收资源
isDestroyed = true;
}
image