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;
}
}
我只能想到在一個say-HandlerProvider類的靜態hashmap中有處理程序,以使它更清潔。有沒有更好的辦法? – Srikanth
在我看來會更糟。您應該找到一種方法將引用直接傳遞給線程,並在片段被解散時釋放它 –