Я прочитал эту статью об использовании статического обработчика. внутренний класс, чтобы избежать утечки памяти.
Я помещаю внутренний класс в активность classBaseActivity
, которую расширяют другие действия. Обработчик отлично работает в классах активности:
public abstract class BaseActivity extends AppCompatActivity {
public Handler handler = new StaticHandler(this);
public static class StaticHandler extends Handler {
private final WeakReference<BaseActivity> mActivity;
public StaticHandler(BaseActivity activity) {
mActivity = new WeakReference<BaseActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
BaseActivity activity = mActivity.get();
if (activity != null) {
// ...
}
}
}
}
Если я хочу использовать обработчик во фрагменте, можно ли вызвать StaticHandler
из базовой активности? Я не могу найти способ сделать это. Должен ли я создать еще один статический обработчик в классе фрагментов? Лучше ли передать handler
из BaseActivity во фрагмент вместо создания нового во фрагменте?
public class SomeFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
final Bundle savedInstanceState) {
Runnable runnable = new Runnable(){....};
Handler handler = new BaseActivity.StaticHandler(getActivity()); // It won't work because the getActivity() doesn't match BaseActivity
handler.post(runnable)
}
}