【发布时间】:2015-06-01 08:03:01
【问题描述】:
private class ProductFragment extends Fragment implements OnGetProductFromDBListener {
Activity a;
void onCreate {
a = getActivity();
new GetProductFromDB();
}
void onGetProductSuccess(Product product) { // This is not called from the main thread because of the implementation of GetProductFromDB
a.runOnUiThread(new Runnable() {
void run() {
// do some UI and Views related stuff
}
});
}
}
现在,作为匿名类的 Runnable 应该包含对 Fragment 的显式引用,对吧?这会阻止碎片被垃圾收集吗?
我应该担心发生内存泄漏吗?我应该如何防止它?
如果我实例化一个扩展 Runnable 并使其成为静态的类,会有帮助吗?
private static class RunnableTask extends Runnable {
ProductFragment fragment;
public RunnableTask (ProductFragment fragment) {
this.fragment = fragment;
}
void run() {
if(fragment.someBoolean) {
fragment.doSomething();
}
}
}
RunnableTask runnable = new RunnableTask();
a.runOnUiThread(runnable)
【问题讨论】:
-
只要运行在执行中,引用就会保持
标签: java android multithreading memory-leaks