Android线程内存泄漏

Posted

技术标签:

【中文标题】Android线程内存泄漏【英文标题】:Android thread memory Leak 【发布时间】:2017-02-04 08:25:30 【问题描述】:

当我从正在运行的服务中获得某个广播消息时,我会写入共享首选项。我想知道这是否会导致内存泄漏? 如果是这样,我该如何解决。我将被要求每 20-25 分钟运行一次此代码。旧线程会死吗?

if(Wifi_Connected)


    Thread thread2=  new Thread(new Runnable() 
                              @Override
                              public void run() 
                                  SharedPreferences.Editor e = sharedData.edit();
                                  e.putInt("Value",1);
                                  e.commit();
                              
                          );

                    thread2.start();


【问题讨论】:

为什么你会认为它会导致内存泄漏?您认为可能会泄漏什么? @JamesKPolk- 我知道线程会导致内存泄漏,这就是我问的原因 我有一个建议给你。完全删除此线程,只需编写代码:sharedData.edit().putInt("Value", 1).apply(); 效率会高得多。 【参考方案1】:

不,它可能会导致一些 UI 卡顿。 commit 操作非常快,所以不会持有outer class太久。但是您最好使用在后台线程中执行操作的 apply() 方法。 一般来说,当你持有对像活动这样的“大”对象的引用时,就会出现泄漏,因此它不能被销毁。

【讨论】:

以上是关于Android线程内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 内存泄漏活动未在线程中完成

Android 内存泄漏的一些情况。

Android面试Android线程间通信Handler消息机制

Android 内存分析指北

Android性能优化之利用LeakCanary检测内存泄漏及解决办法(转)

Android性能优化之利用LeakCanary检测内存泄漏及解决办法(转)