【发布时间】:2017-08-11 07:52:56
【问题描述】:
根据this 文章,我在 Activity 类中修改了我的处理程序,如下所示:
private static class ActivityHandler extends Handler
{
private final WeakReference<MyActivity> mActivity;
public ActivityHandler(MyActivity activity)
{
mActivity = new WeakReference< MyActivity >(activity);
}
public final MyActivity getActivity()
{
return mActivity.get();
}
}
处理程序已初始化:
ActivityHandler handler = new ActivityHandler(this);
但是,在我的活动逻辑的几个点中,我必须在这个处理程序上调用 post。所以不要这样:
handler.post(new Runnable()
{
@Override
public void run()
{
setSomeProperties();
}
});
我现在这样做:
handler.post(new Runnable()
{
@Override
public void run()
{
MyActivity activity = handler.getActivity();
if (activity != null)
{
activity.setSomeProperties();
}
}
});
不管在我运行应用程序并检查 hprof 文件是否有泄露的活动时发生了这种变化,我仍然会被指向 handler.post(new Runnable()) 行。我做错了什么?
附言我已经看到许多在处理程序上覆盖 handleMessage 的示例,但是,我无法与我的案例建立联系并使用它。
【问题讨论】:
标签: java android memory-leaks static inner-classes