asynctask
android的ui執行緒主要負責處理使用者的按鍵事件、使用者觸屏事件及螢幕繪製事件等,因此開發者的其它操作不應該也不能阻塞ui執行緒
為避免ui執行緒失去響應,android建議將耗時操作放在新執行緒中完成,但新執行緒可能需要動態更新ui元件,而新執行緒是不允許直接更新ui元件的。
為解決新執行緒不能更新ui元件這乙個問題,android提供了如下方案:
handler處理已作說明,而後三種方式程式設計略顯繁瑣,而非同步任務(asynctask)則可進一步簡化這種操作
asynctask是抽象類,它定義了如下三種泛型:
使用asynctask的3個步驟:
建立asynctask子類,並為三個泛型引數指定型別(不需要的可指定為void)
據需要,實現asynctask的方法:
fun1:doinbackground(params):重寫該方法就是後台程式將要完成的任務,該方法可以呼叫publishprogress(params..)更新任務執行進度
fun2:onprogressupdate(progress
…value):在doinbackground()方法中呼叫publishprogress()更新進度後將觸發該方法
fun3:onpreexecute():該方法將在執行後台耗時操作前被呼叫。通常用於完成一些初始化的操作,如在介面上顯示進度條
fun4:onpostexecute(result result):當doinbackground()完成後,系統會自動呼叫onpostexecute()方法,並將doinbackground方法的返回值傳給該方法
3.呼叫asynctask子類的例項的execute(params... params)開始執行耗時任務
使用asynctask時必須遵守如下規則:
1.必須在ui執行緒中建立asynctask例項
2.必須在ui執行緒中呼叫asynctask的execute()方法
3.asynctask的onpreexecute()、onpostexecute(result result)、doinbackground(params params),onprogressupdate(progress values)方法由android系統負責呼叫
4.每個asynctask只能被執行一次,多次呼叫將會引發異常
示例**如下:
public
class
mainactivity
extends
activity
public
void
download(view source)
throws
malformedurlexception
class
downtask
extends
asynctask
@override
protected
string doinbackground(url... params)
return
sb.tostring();
}catch
(exception e)
return
null;}
@override
protected
void
onpostexecute(string result)
@override
protected
void
onpreexecute()
@override
protected
void
onprogressupdate(integer...values )}}
另外,程式需要使用網路,所以需要在android_manifest.xml檔案中宣告許可權
<
uses-permission
android:name="android.permission.internet"
/>
Android 事件處理
view 提供了若干事件.在渲染 布局 展現 相關事件的觸發順序總結如下 constructors onfinishinflate 當view和它的所有子物件從xml中匯入之後,呼叫此方法 layout onmeasure int,int view會呼叫此方法,來確認自己及所有子物件的大小 onla...
Android事件處理
按鍵捕獲先後順序 驅動層 系統層 library層 框架層 應用層。應用層return false,事件會繼續向底層傳遞。應用層return true,事件終止不再傳遞。呼叫super方法,activity會決定事件處理方式以及是否向底層傳輸。return false和return true會導致按...
事件驅動之非同步事件
public void head private void raiseevent headedevent headedevent 所以我們只需在 裡raiseevent就可以了。其實很簡單,因為我們要實現的是同步的事件,我們只需要找到所有處理這個事件的實現類,然後呼叫所有就可以了。public in...