这是一个有毒的方法 onDestory

2018-10-26  本文已影响22人  wan7451

以前从来没有关注过这个方法,直接释放资源,直到今天遇到这个大坑 坑 坑。

image

项目中用到了Socket 长连接,一般的操作都是在 Activity 初始化的时候建立连接,销毁的时候断开连接。

今天测试小哥哥突然发现重大Bug:界面拉取不到数据。

通过调试发现是连接一直连接不上。而且,每次打开页面,不是先建立连接,而是先断开连接,然后再进行真正的连接。
经过一通神操作后,发现问题出的 onDestory 方法上。在页面结束的时候,他并没有立刻执行!!

image

简单处理下,顺利解决问题

    @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
上一篇下一篇

猜你喜欢

热点阅读