1、 基本ui定義
2、 資料庫的操作
3、 service的啟動
4、 activity給service傳遞引數
5、 使用廣播回傳資料到activity
6、 執行緒和handler
7、 網路操作:檔案的寫入,網路往本地磁碟寫入
1) 連線網路檔案
2) 獲取檔案長度
3) 在本地建立檔案
4) 設定檔案長度
第一次啟動的時候,會去建立service,當service已經啟動後,不會再去建立,而是會把intent的引數繼續傳遞給service,service通過onstartcommend接收引數
1) 設定獲取實體資料的範圍
conn.setrequestproperty(「range」, 「bytes=」 + start + 「-」 + end);
2) 響應狀態碼
1) 在檔案的任意位置進行寫入操作,這樣就實現了斷點續傳
2) randomaccessfile raf = new randomaccessfile(file file, string mode);
3) 檔案模式mode:
4) 設定檔案寫入位置:raf.seek(index);
1) activity通過intent,設定action,startservice傳遞intent
2) service通過onstartcommand去接收intent
3) service通過sendbroadcast 傳送廣播,通過intent,設定action,將資料傳遞給activity
4) activity定義broadcastreceiver廣播接受者,獲取intent,根據action,將進度資訊設定給progress。
5) activity需要建立intentfilter篩選器,registerreceiver註冊廣播接受者。
如果伺服器沒有相關的配置的話,那麼getinputstream返回的資料依舊是整個檔案,獲得的responsecode == 200,如果配置過得responsecode == 206 ( 我在這裡踩過坑 )
3) randomaccessfile設定檔案寫入位置
1) activity是可以被使用者關閉的,被android系統**,如果執行緒開啟了,activity被關閉了,就沒有辦法對執行緒進行管理,是非常不安全的。
2) service是後台元件,沒有辦法和使用者互動,而且優先順序級別比較高,一般不會被android系統**,把一下重要的事情,執行緒的啟動和操作,放在service中會比較安全。
【demo】
多執行緒斷點續傳(二)
getview 方法會重新呼叫一遍 1 問題 多個執行緒在操作同乙個資料庫,導致資料庫鎖定的問題 資料庫設定為單例模式,保證這個類只有乙個物件,乙個例項。多個例項會產生多個地方去運算元據庫。單例的話,也就是說只有乙個例項會對資料庫進行訪問操作。2 單例設計 永遠只會被例項化一次 a 私有化構造方法 ...
三 多執行緒斷點續傳
conn.setrequestmethod get 獲取檔案總長度,然後建立長度一致的臨時檔案 向伺服器請求部分資料 conn.setrequestproperty range bytes startindex endindex conn.connect if conn.getresponsecod...
如何點對點實現多執行緒斷點續傳
dword winapi listenthread lpvoid lpparam file 進入迴圈,並接收到來的套接字 while 1 return 0 接著我們來看使用者執行緒 先看檔案訊息類定義 struct fileinfo file 使用者執行緒函式 dword winapi client...