这是一个有毒的方法 onDestory

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

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,612评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,058评论 0 13
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,922评论 0 5
  • 2018年4月8日星期日 晴 早上起床,做好早饭叫儿子起床,吃完早饭自己上学。我去早市买了几样青...
    张宗欣阅读 237评论 1 0