发布 MainThread Runnables 内存泄漏安全 Android
Posted
技术标签:
【中文标题】发布 MainThread Runnables 内存泄漏安全 Android【英文标题】:Posting MainThread Runnables Memory Leak Safe Android 【发布时间】:2018-12-30 04:05:21 【问题描述】:我有一个关于内存泄漏的问题。我有以下匿名课程。您可能知道匿名类持有来自外部对象的引用(这里是 Activity)。此代码是否会导致内存泄漏?在定向的情况下,这将保留旧活动。对吧?
谢谢
public class MainActivity extends AppCompatActivity
recyclerview.post(new Runnable()
@Override
public void run()
// Notify adapter with appropriate notify methods
adapter.notifyItemRangeInserted(curSize, allContacts.size() - 1);
);
【问题讨论】:
【参考方案1】:这段代码是否会导致内存泄漏?
不是真的。 Runnable
应该在一毫秒左右执行 - 否则,你有更大的问题。
如果Runnable
存在很长一段时间,那么你可能有内存泄漏。
【讨论】:
我怎么知道这个runnable是否存在很长一段时间?如果由于某种原因主线程无法在旋转发生之前执行此可运行对象,则会出现内存泄漏。但即便如此,我该如何控制呢?我认为没有解决方法 @Nick:“我怎么知道这个 runnable 是否存在很长一段时间?” -- 调用post()
不会导致长期存在的Runnable
,除非您的应用程序中有严重的错误导致主应用程序线程长时间忙碌。 “如果由于某种原因主线程无法在旋转发生之前执行此可运行对象,则会出现内存泄漏” - 这将是由于您的代码中的错误占用了主应用程序线程。 “我怎么能控制这个?” -- 修复代码中占用主应用程序线程的错误。
如果在 runnable 执行之前有什么东西杀死了这个活动,就会有内存泄漏以上是关于发布 MainThread Runnables 内存泄漏安全 Android的主要内容,如果未能解决你的问题,请参考以下文章
执行新的runnables时丢失ApplicationContext
如何从异步上下文切换 MainThread 的 CurrentCulture?