2014-01-10 19 views
1

我需要創建一個可由許多後臺線程更新的UI片段。以下面所示的方式讓處理程序公開訪問,是否有任何複雜性?我沒有遇到任何人這樣做,所以我有點擔心。是否可以公開訪問處理程序(主UI片段的)有任何併發​​症?

public class MainFragment extends Fragment { 

private static class MyHandler extends Handler { 
    WeakReference<MainFragment> mFrag; 

    MyHandler(MainFragment aFragment) { 
     mFrag = new WeakReference<MainFragment>(aFragment); 
    } 

    @Override 
    public void handleMessage(Message message) { 
     // Unpack message and handle specific UI updates 
     // calling MainFragment's methods using the 
     // weak reference 'mFrag' 
    } 
} 

private static MyHandler mHandler; 

// Create handler on resume 
@Override 
public void onResume() { 
    super.onResume(); 
    mHandler = new MyHandler(this); 
} 

@Override 
// Destroy handler on pause 
public void onPause() { 
    super.onPause(); 
    mHandler = null; 
} 

// When a background thread wants to update the main 
// UI, it calls this method as 
// MainFragment.getHandler().post(message) 
public static Handler getHandler() { 
    return mHandler; 
} 

}

回答

0

這並不是一個非常乾淨的設計,但如果這是你的關注不應該出現內存泄漏。

+0

我只能想到在一個say-HandlerProvider類的靜態hashmap中有處理程序,以使它更清潔。有沒有更好的辦法? – Srikanth

+0

在我看來會更糟。您應該找到一種方法將引用直接傳遞給線程,並在片段被解散時釋放它 –

相關問題