我已閱讀關於主題的fewposts。這是我的策略;我有一個繪圖應用程序,它在ListView中顯示用戶創建的圖形。一旦用戶選擇了圖中,DrawingEdit活動被激發起來,用圖中的onCreate被加載,大致如下:Android:將圖像閃爍到其他屏幕顯示內容正在加載
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout for the activity
setContentView(R.layout.drawing_view);
// do potentially expensive loading of drawing here
loadDrawing();
}
凡loadDrawing()
加載用戶的繪圖的各個形狀從一個數據庫。現在,對於95%的圖紙以及「典型」用例,這可以很好地工作,因爲「活動」加載速度很快,幾乎沒有延遲。但是,對於非常非常複雜的圖紙,延遲時間可能長達兩秒。爲了幫助解決這個問題,我嘗試了一個AsyncTask,它適用於5%過大的圖紙,但對於其他95%的圖片看起來像是矯枉過正,實際上使得加載速度稍慢一些,因爲必須點火啓動AsyncTask。這不是最糟糕的解決方案,但我正在尋找替代品。
現在,除了我已經存儲在數據庫中的繪圖數據之外,我還可以使用靜態PNG版本的繪圖...所以我想要使用的解決方案是沿着線:
- 負載臨時「閃」屏幕在的onCreate開頭視圖(),使用靜態圖形用作佔位符,用戶能夠立即查看而繪圖加載。
- 開始有時很昂貴的
loadDrawing()
例程。 - 完成後,切換視圖並使用包含
loadDrawing()
形狀的完全交互式繪圖畫布顯示輔助視圖。
我的問題是,如果我的上述解決方案大致如下模式,是永遠不會顯示「飛濺」的佈局,且仍有相同的延遲,直到loadDrawing()
完成,然後顯示最終佈局。有關這裏發生的事情的任何信息?我應該將loadDrawing()
移動到onResume,以便在觸發loadDrawing()
之前初始啓動UI有機會加載?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the layout for the activity
setContentView(R.layout.splash_view);
// do potentially expensive loading of drawing here
if (loadDrawing()) {
// set the layout for the activity
setContentView(R.layout.drawing_view);
}
}
嗯,好的,完美的,當用戶界面被繪製的時候並不是100%的確定的,這就涵蓋了它,謝謝。 – 2011-04-04 02:14:44
@Paul:很高興幫助,不得不承認,當第一次抓住活動和UI線程時,它讓我感到困惑。 – Squonk 2011-04-04 12:48:55