簡體   English   中英

Android:在加載其他View內容時將圖像閃爍到屏幕

[英]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版本...因此,我要使用的解決方案是:

  1. 使用靜態圖形作為占位符,在onCreate()的開頭加載臨時的“初始”屏幕視圖,用戶可以在加載圖形時立即對其進行查看。
  2. 啟動有時昂貴的loadDrawing()例程。
  3. 完成后,切換視圖並顯示具有完全交互式繪圖畫布的輔助視圖,其中包括來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM