① android中實現非同步操作的方式有哪些,請簡述各自的特點
AsyncTask類。這是安卓自帶的非同步載入類,封裝較好,使用方便
直接開啟子線程通過handler發送消息更新,代碼繁瑣一點,AsyncTask源碼也是這個原理
② android為什麼要用非同步任務
一般Android中的非同步都是用在網路請求時,而網路請求都有一些延時,如果都放在主線程中就會出現屏幕卡住的現象,這樣會影響用戶操作效果。。。
③ android 非同步方法和子線程方法有什麼區別
子線程沒有控制並發數量,當並發過多的時候非同步方法的作用就體現出來了。
非同步是相對於同步而言的,顧名思義,同步就是各個通訊節點之間有統一的時鍾,按照相同的時鍾工作,非同步相反,各節點之間沒有統一的時鍾,每個節點按照自己內部的時鍾工作。
android在所有Thread當中,有一個Thread,我們稱之為UI Thread。UI
Thread在Android程序運行的時候就被創建,是一個Process當中的主線程Main
Thread,主要是負責控制UI界面的顯示、更新和控制項交互。在Android程序創建之初,一個Process呈現的是單線程模型,所有的任務都在一個線程中運行。因此,我們認為,UI
Thread所執行的每一個函數,所花費的時間都應該是越短越好。而其他比較費時的工作(訪問網路,下載數據,查詢資料庫等),都應該交由子線程去執行,以免阻塞主線程。
④ 如何在Android開發中用AsyncTask非同步更新UI界面
在Android中實現非同步任務機制有兩種方式,Handler和AsyncTask。
Handler模式需要為每一個任務創建一個新的線程,任務完成後通過Handler實例向UI線程發送消息,完成界面的更新,這種方式對於整個過程的控制比較精細,但也是有缺點的,例如代碼相對臃腫,在多個任務同時執行時,不易對線程進行精確的控制。
為了簡化操作,Android1.5提供了工具類android.os.AsyncTask,它使創建非同步任務變得更加簡單,不再需要編寫任務線程和Handler實例即可完成相同的任務。
先來看看AsyncTask的定義:
public abstract class AsyncTask<Params, Progress, Result> {}
三種泛型類型分別代表「啟動任務執行的輸入參數」、「後台任務執行的進度」、「後台計算結果的類型」。在特定場合下,並不是所有類型都被使用,如果沒有被使用,可以用java.lang.Void類型代替。
一個非同步任務的執行一般包括以下幾個步驟:
1.execute(Params... params),執行一個非同步任務,需要我們在代碼中調用此方法,觸發非同步任務的執行。
2.onPreExecute(),在execute(Params... params)被調用後立即執行,一般用來在執行後台任務前對UI做一些標記。
3.doInBackground(Params... params),在onPreExecute()完成後立即執行,用於執行較為費時的操作,此方法將接收輸入參數和返回計算結果。在執行過程中可以調用publishProgress(Progress... values)來更新進度信息。
4.onProgressUpdate(Progress... values),在調用publishProgress(Progress... values)時,此方法被執行,直接將進度信息更新到UI組件上。
5.onPostExecute(Result result),當後台操作結束時,此方法將會被調用,計算結果將做為參數傳遞到此方法中,直接將結果顯示到UI組件上。
⑤ java或者android實現非同步的方式只能用多線程嗎,有沒有其他的方式。
android中有AsyncQueryHandler和AsyncTask都是用來非同步消息傳遞的,不過本質都是多線程,不過Android幫你封裝好了方便調用而已。希望能夠幫助到你!
⑥ android什麼叫非同步請求,怎麼實現
一.非同步請求主要解決線程無法更新UI組件的方案
使用Handler實現線程之間的通信。
Activity.runOnUiThread(Runnbale)
View.post(Runnable)
View.postDelayed(Runnable)
二.ANR異常
Android默認約定當UI線程阻塞超過20秒將會引發ANR異常。開發者必須牢記,不要在UI線程中執行一些耗時操作
三.AsyncTask抽象類
AsyncTask<Params,Progress,Result>是一個抽象類,通常用於被繼承,繼承AsyncTask需要指定三個泛型參數:
Params:啟動任務執行的輸入參數的類型
Progress:後台任務完成進度值得類型
Result:後台執行任務完成後返回結果的類型
四.AsyncTask的特點
更輕量一些,適用於簡單的非同步處理,不需要藉助線程和Handler即可
五.使用AsyncTask的步驟
創建AsyncTask的子類,並為三個泛型參數指定類型,如果某個泛型參數不需要指定類型,可將它設為Void
根據需要,實現AsyncTask的如下方法:
doInBackground(Params...):後台線程將要完成的任務,可以調用publishProgress(Porgress...values)方法更新任務執行進度。
onProgressUpdate(Porgress..values):在doInBackground()方法中調用publishPorgress()方法更新任務的執行進度後,就會觸發該方法
onPreExecute():執行後台耗時操作前被調用,通常用戶完成一些初始化操作,比如在界面上顯示進度條
onPostExecute(Result result):當doInBackground()完成後,系統會自動調用onPostExecute()方法,並將doInBackground()方法返回的值傳給該方法.
調用AsyncTask子類的實例的execute(Params...params)開始執行耗時任務
六.使用AsyncTask時必須遵守的規則
必須在UI中創建AsyncTask的實例
必須在UI線程中調用AsyncTask的execute()方法
AsyncTask的onPreExecute()、onPostExecute(Result result)、doInBackground(Params....params)、onProgressUpdate(Progress...values)方法,不應該由程序員代碼調用,而是由AsyncTask系統負責調用
每個AsyncTask只能被執行一次,多次調用將會引發異常。
⑦ Android非同步更新UI的幾種方法
android中有下列幾種非同步更新ui的解決辦法:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
long) View.postDelayed(Runnable, long)
使用handler(線程間通訊)(推薦)
AsyncTask(
⑧ android sdk哪些非同步方法
android中有下列幾種非同步更新ui的解決辦法:
Activity.runOnUiThread(Runnable) View.post(Runnable) long) View.postDelayed(Runnable, long) 使用handler(線程間通訊)(推薦) AsyncTask(推薦)
對於下面這段代碼:
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
mImageView.setImageBitmap(bitmap);
}
}).start();
}