片段的静态处理程序?
Static handler for fragments?
我阅读了 this piece 关于使用内部静态处理程序 class 来避免内存泄漏的内容。
我把内部的class放在一个activityclassBaseActivity
里面,其他的activities extend。处理程序在 activity classes:
中工作正常
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) {
// ...
}
}
}
}
如果我想在片段中使用处理程序,是否可以从 Base Activity 调用 StaticHandler
?我找不到办法做到这一点。我应该在片段 class 中创建另一个静态处理程序吗?将 BaseActivity 中的 handler
传递给片段而不是在片段中实例化一个新片段是否更好?
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)
}
}
因为 BaseActivity
扩展 AppCompatActivity
所以从 Fragment 传递 AppCompatActivity
上下文为:
Handler handler = new BaseActivity.StaticHandler((BaseActivity)getActivity());
还在 BaseActivity
中初始化 handler
对象而不是在 class 级别的任何方法中。
我阅读了 this piece 关于使用内部静态处理程序 class 来避免内存泄漏的内容。
我把内部的class放在一个activityclassBaseActivity
里面,其他的activities extend。处理程序在 activity classes:
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) {
// ...
}
}
}
}
如果我想在片段中使用处理程序,是否可以从 Base Activity 调用 StaticHandler
?我找不到办法做到这一点。我应该在片段 class 中创建另一个静态处理程序吗?将 BaseActivity 中的 handler
传递给片段而不是在片段中实例化一个新片段是否更好?
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)
}
}
因为 BaseActivity
扩展 AppCompatActivity
所以从 Fragment 传递 AppCompatActivity
上下文为:
Handler handler = new BaseActivity.StaticHandler((BaseActivity)getActivity());
还在 BaseActivity
中初始化 handler
对象而不是在 class 级别的任何方法中。