【问题标题】:Static handler for fragments?片段的静态处理程序?
【发布时间】:2016-06-29 04:42:13
【问题描述】:

我阅读了this piece 关于使用静态处理程序内部类来避免内存泄漏的信息。

我将内部类放在一个活动类BaseActivity 中,其他活动扩展了该活动。处理程序在活动类中工作正常:

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)


    }
}

【问题讨论】:

    标签: java android android-fragments android-handler


    【解决方案1】:

    因为BaseActivity 扩展了AppCompatActivity 所以从Fragment 传递AppCompatActivity 上下文为:

    Handler handler = new BaseActivity.StaticHandler((BaseActivity)getActivity());
    

    同样在BaseActivity 中,在任何方法中而不是在类级别初始化handler 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多