導航:首頁 > 操作系統 > android單線程多任務下載

android單線程多任務下載

發布時間:2022-12-29 10:15:14

『壹』 android 客戶端如何實現從伺服器下載多圖片,就是把自己上傳到伺服器的所有圖片都下載到android客戶端

如果你圖片太大的話就需要Service一般的話一個線程就可以了『,在你情況的時候需要你伺服器的介面,才能連接

『貳』 android後台多文件下載怎樣實現

可以創建一個服務,然後開啟多線程下載。不過不推薦多線程,建議使用單線程排隊下載。

『叄』 android 非同步方法和子線程方法有什麼區別

子線程沒有控制並發數量,當並發過多的時候非同步方法的作用就體現出來了。

非同步是相對於同步而言的,顧名思義,同步就是各個通訊節點之間有統一的時鍾,按照相同的時鍾工作,非同步相反,各節點之間沒有統一的時鍾,每個節點按照自己內部的時鍾工作。
android在所有Thread當中,有一個Thread,我們稱之為UI Thread。UI
Thread在Android程序運行的時候就被創建,是一個Process當中的主線程Main
Thread,主要是負責控制UI界面的顯示、更新和控制項交互。在Android程序創建之初,一個Process呈現的是單線程模型,所有的任務都在一個線程中運行。因此,我們認為,UI
Thread所執行的每一個函數,所花費的時間都應該是越短越好。而其他比較費時的工作(訪問網路,下載數據,查詢資料庫等),都應該交由子線程去執行,以免阻塞主線程。

『肆』 android 怎麼處理線程安全

UI線程及Android的單線程模型原則當應用啟動,系統會創建一個主線程(main thread)。這個主線程負責向UI組件分發事件(包括繪制事件),也是在這個主線程里,應用和Android的UI組件(components from the Android UI toolkit (components from the android.widget and android.view packages))發生交互。 當App做一些比較重(intensive)的工作的時候,除非合理地實現,否則單線程模型的performance會很poor。特別的是,如果所有的工作都在UI線程,做一些比較耗時的工作比如訪問網路或者資料庫查詢,都會阻塞UI線程,導致事件停止分發(包括繪制事件)。對於用戶來說,應用看起來像是卡住了,更壞的情況是,如果UI線程blocked的時間太長(大約超過5秒),用戶就會看到ANR(application not responding)的對話框。 另外,Andoid UI toolkit並不是線程安全的,所以不能從非UI線程來操縱UI組件。必須把所有的UI操作放在UI線程里,所以Android的單線程模型有兩條原則: 1.不要阻塞UI線程。 2.不要在UI線程之外訪問Android UI toolkit(主要是這兩個包中的組件:android.widget and android.view)。

『伍』 如何在Android中實現一個簡單連接網路的應用程序

注意:要執行這節課中描述的網路操作,你應用程序的manifest文件中必須包含以下許可權:1 2<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>選擇一個HTTP客戶端 Choose an HTTP Client大多數網路連接的Android應用使用HTTP發送和接受數據,Android包括兩個HTTP客戶端:HttpURLConnection和Apache HttpClient,它們支持HTTPS,流上傳和下載,
可配置的超時,IPv6以及連接池,在android系統版本為「姜餅」(android2.3)或者更高版本的應用程序中,推薦使用HttpURLConnection,更多關於這個主題的討論,請查看博客Android HTTP 客戶端檢查網路連接 Check the Network Connection在你的應用試圖連接到網路時,應該先檢查網路連接是否可用,可以用getActiveNetworkInfo()和isConnected()方法執行檢查。記住,設備(手機等設備)可能不在網路連接的范圍內,或者用戶禁用了Wi-Fi或者移動數據通道。更多關於此主題的討論,請參看課程管理網路使用
1 2 3 4 5 6 7 8 9 10 11 12publicvoidmyClickHandler(Viewview){...ConnectivityManagerconnMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkInfo=connMgr.getActiveNetworkInfo();if(networkInfo!=null&&networkInfo.isConnected()){// 獲取數據}else{// 顯示錯誤}...}在獨立線程中執行網路連接 Perform Network Operations on a Separate Thread網路操作涉及不可預知的延遲,為了防止不良的用戶體驗,通常的做法是從UI中獨立出線程去執行網路連接操作。AsyncTask類提供了最簡單的從UI線程中獨立出一個新任務的方式。
更多關於此主題的討論,請參看博客多線程性能在下面的代碼片段中,myClickHandler()方法執行了new DownloadWebpageTask().execute(stringUrl).DownloadWebpageTask類是AsyncTask的子類,DownloadWebpageTask實現了下面AsyncTask的方法:
doInbackground()會執行downloadUrl()方法,downlaodUrl()方法將網頁的URL地址作為參數,並獲取和處理網頁的內容,當它處理完這些操作,將會返回一個結果字元串。
onPostExecute()接受返回字元串並顯示在UI上。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 {privatestaticfinalStringDEBUG_TAG="HttpExample";privateEditTexturlText;privateTextViewtextView;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);urlText=(EditText)findViewById(R.id.myUrl);textView=(TextView)findViewById(R.id.myText);}// 當用戶點擊按鈕,調用AsyncTask// 在試圖獲取URL時,確保有一個網路連接publicvoidmyClickHandler(Viewview){// 從UI的text欄位中得到URLStringstringUrl=urlText.getText().toString();ConnectivityManagerconnMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkInfo=connMgr.getActiveNetworkInfo();if(networkInfo!=null&&networkInfo.isConnected()){newDownloadWebpageText().execute(stringUrl);}else{textView.setText("No network connection available.");}}// 使用AsyncTask創建一個獨立於主UI線程之外的任務. 並使用URL字元串創建一個HttpUrlConnection對象。 // 一旦連接建立,AsyncTask則將網頁內容作為一個InputStream對象進行下載。// 最終,InputStream對象會被轉換為一個字元串對象,並被AsyncTask的onPostExecute方法顯示在UI上。{@(String...urls){// 參數來自execute(),調用params[0]得到URLtry{returndownloadUrl(urls[0]);}catch(IOExceptione){return"無法獲取網頁,URL可能無效!Unable to retrieve web page. URL may be invalid.";}}// onPostExecute顯示AsyncTask結果.@(Stringresult){textView.setText(result);}}...}該片段事件順序如下:1.當用戶點擊執行myClickHander()方法的按鈕時,應用會將指定的URL傳遞給AsyncTask的子類DownloadWebpageTask。2.AsyncTask的方法doInBackground()調用downloadUrl()。3.downloadUrl()接收到作為字元串參數傳遞過來的URL,並用它創建一個URL對象。4.使用URL對象創建HttpURLConnection對象。5.一旦創建完HttpURLConnection對象,該對象將會以InputStream對象方式獲取網頁內容。6.InputStream再通過readIt()方法將流轉換為字元。7.最後,AsyncTask的onPostExecute方法將字元顯示在主activity的UI。連接並下載數據 Connect and Download Data在你執行網路事務的線程中,你可以使用HttpURLConnection執行GET方法下載數據,在你調用了connect()方法後,你可以通過調用getInputStream()方法得到數據的InputStream對象。
在下面的代碼片段中,doInBackground()方法調用了downloadUrl()方法。downloadUrl方法接收給過來的URL,並使用它通過HttpURLConnection對象連接到網路。一旦連接成功,應用將使用getInputStream()方法獲得InputStream對象數據。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31// 給一個URL,建立HttpUrlConnection對象並作為流對象(InputStream)獲取網頁數據,最後返回一個字元串。privateStringdownloadUrl(Stringmyurl)throwsIOException{InputStreamis=null;// 先顯示獲取到的前500個位元組// 網頁內容intlen=500;try{URLurl=newURL(myurl);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setReadTimeout(10000/*milliseconds*/);conn.setConnectTimeout(15000/*milliseconds*/);conn.setRequestMethod("GET");conn.setDoInput(true);// 開始查詢conn.connect();intresponse=conn.getResponseCode();Log.d(DEBUG_TAG,"The response is: "+response);is=conn.getInputStream();// 將InputStream轉化為stringStringcontentAsString=readIt(is,len);returncontentAsString;// 確保當app用完InputStream對象後關閉它。}finally{if(is!=null){is.close();}}}注意:getResponseCode()方法返回的是連接狀態碼,它是獲取更多關於連接信息的有效方式。狀態碼200表示連接成功。

閱讀全文

與android單線程多任務下載相關的資料

熱點內容
tc腳本文件夾 瀏覽:732
學會繪畫pdf 瀏覽:954
隱身俠加密寶手機版 瀏覽:135
農行app怎麼辦理簽約手續 瀏覽:185
汽車壓力解壓神器 瀏覽:307
家用冰箱壓縮機有風扇嗎 瀏覽:647
安卓qq年齡怎麼看 瀏覽:839
屏幕跳屏亂點app怎麼解決 瀏覽:414
turbo加速器android 瀏覽:432
洪尚秀的電影哪裡哪個app能看 瀏覽:151
百度網站加密視頻怎麼下載 瀏覽:135
台州ug產品編程培訓班 瀏覽:866
Javalinux字體 瀏覽:520
77萬年會程序員補貼 瀏覽:610
滅火是由近及源碼 瀏覽:158
資料伺服器地址 瀏覽:8
網頁怎麼放在伺服器商 瀏覽:995
伺服器出差錯是什麼原因 瀏覽:595
如何修改通達信主圖指標源碼 瀏覽:352
聯想硬碟加密教程 瀏覽:65