多執行緒斷點續傳(一)

2021-07-15 05:37:14 字數 1827 閱讀 9255

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...