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())
一行。我究竟做錯了什麼?
p.s.我已經看到很多例子在處理程序上重寫handleMessage,但是,我還沒有能夠與我的案例建立連接並使用它。
非常感謝您的支持。因此,在sRunnable的run方法中,我將如何調用setSomeProperties(),它是非靜態的? –
與'Handler'類似,您可以創建自己的'Runnable'類繼承'Runnable',並在'WeakReference'中包含'Activity'實例。現在你可以用'Activity'實例調用'setSomeProperties()'。或者在本文的註釋部分中提出的另一種解決方案是在Activity的'onDestroy()'中調用'mHandler.removeCallbacks(mRunnable)',而不是使'Runnable'靜態。你也可以這樣做。 – Bob
再次感謝,這是最有幫助的。 –