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, являющийся анонимным классом, должен содержать явную ссылку на фрагмент, не так ли? И это помешало бы Фрагменту быть собранным Мусором?Будет ли это конкретное использование анонимного Runnable причиной утечки памяти?
Должен ли я беспокоиться о возникшей утечке памяти и как ее предотвратить?
Помогите, если я создам экземпляр класса, который расширяет 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)
Ссылка сохраняется до тех пор, пока выполняется запуск – Blackbelt