[英]Android: Flashing image to screen while other View content is loading
我已經閱讀了有關該主題的幾篇 文章 。 這是我的策略; 我有一個繪圖應用程序,可以在ListView中顯示用戶創建的繪圖。 用戶選擇繪圖后,將啟動DrawingEdit活動,並將繪圖加載到onCreate中,大致如下:
@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%的工程圖和“典型”用例,此方法都可以正常工作,因為Activity加載很快,幾乎沒有延遲。 但是,對於非常復雜的圖形,延遲可能長達2秒。 為了幫助解決此問題,我嘗試了一個AsyncTask,它對於5%的過大圖紙非常有效,但對於另外95%的圖紙來說似乎過頭了,實際上由於不得不開火,加載速度稍慢AsyncTask。 這不是最糟糕的解決方案,但我正在尋找替代方案。
現在,除了我存儲在數據庫中的圖形數據之外,我還可以使用圖形的靜態PNG版本...因此,我要使用的解決方案是:
loadDrawing()
例程。 loadDrawing()
的形狀。 我的問題是,如果我大致按如下所示對上述解決方案進行建模,則“ splash”布局將永遠不會顯示,並且在loadDrawing()
完成並顯示最終布局之前仍然存在相同的延遲。 關於這里發生的事情的任何信息? 我應該將loadDrawing()
移到onResume上,以便在啟動loadDrawing()
之前有機會加載初始啟動界面嗎?
@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);
}
}
如果loadDrawing是您Activity中的一個方法,它將阻塞UI線程直到完成。 簡而言之,直到完成啟動步驟(創建/啟動/繼續)后,才會顯示UI。 是否將loadDrawing放在onResume中並不重要,因為它仍然會阻止UI的創建。
您需要使用某種后台異步線程來使其正常工作-這就是為什么AsyncTask有助於在需要同時進行其他操作的同時繪制/操作UI的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.