PS:進度條的樣子以下圖所示,不過因爲加載速度很快,這進度條都是一閃而過的。這張圖片是在單步調試的環境下截取的。 安全
在這一章,咱們將詳細介紹,程序如何建立子線程,以及如何控制進度條的顯示與消失。
本章涉及的核心類是UIUtil類。 app
FBReader默認首先進入的FBReader類,這是在AndroidManifes.xml設定的。 spa
這個方法中進行了一系列的初始化工做:
102行:設置程序爲全屏
107行:設置程序的界面,這個界面是ViewZLAndroidWidget類。咱們會在第十章「epub文件處理 -- 顯示」中詳細分析這個類的onDraw方法。
110行:調用ZLAndroidLibrary類的setActivity方法,爲ZLAndroidLibrary類裏面的myActivity變量賦了值(請你們記住這個方法,咱們立刻會用到這個變量)
114行:調用FBReader類的createApplication方法,返回一個FBReaderApp類
117行:調用FBReaderApp類的子類FBReaderApp中的initWindow方法,這個方法方法將負責創建子線程,並在主線程顯示進度條 線程
還記得剛纔要你們記住的ZLAndroidLibrary類的setActivity方法嗎?當時這個方法,給ZLAndroidLibrary類的myActivity變量賦了值。如今ZLAndroidLibrary類的wait方法會判斷這個屬性,如這個屬性爲null,就會直接在主線程中運行讀取epub文件的代碼(這樣可能會形成主線程中的UI產生停滯);若是這個屬性不爲null,就會調用UIUtil類的wai方法,分兩個線程處理程序 調試
關於進度條,有兩個部分須要詳細介紹一下:第一是如何讓進度條消失,第二是如何獲取進度條要顯示的文字。 xml
ourProgressHandler變量指向的Handler類中一旦收到子線程的「通知」就會讓進度條消失 圖片
這裏要請你們注意一下,UIUtil類的wait方法考慮到了多重後臺任務的狀況下,進度條怎樣顯示與消失。多重後臺任務的狀況,確定必須是全部任務都完成的狀況下,才能讓進度條消失,那麼代碼是如何實現的呢?
代碼首先在UIUtil類的wait方法中用ourTaskQueue屬性保存全部的後臺任務
資源
而後,在Handler類中判斷ourTaskQueue中是否爲空,爲空時才讓進度條消失 get
同時,由於子線程和Handler類都在操做ourTaskQueue,必須使用wait方法和notify方法保證整個變量線程安全 it
資源文件的位置在assets/resourses中application和zlibrary兩個文件夾中。
這兩個文件夾中存儲了各類語言的版本,其中FBReader程序默認的是uk.xml,而代碼最終會根據手機的語言設置,去顯示zh.xml中的內容。
咱們要尋找的顯示在ProgressBar中的文字就在application文件夾中zh.xml文件中dialog節點下的waitMesssage節點下的loadingBook節點的value屬性。
代碼具體如何解析zh.xml文件,來獲取指定節點下的value屬性,咱們將在下一章中介紹。