UI線程和異步(AsyncTask)線程
本文位址: http://blog.csdn.net/caroline_wendy
本文的合集已經編著成書,進階Android開發強化實戰,歡迎各位讀友的建議和指導。
在京東即可購買:https://item.jd.com/12385680.html
Android的UI線程,也稱作單線程,單線程應用串行運作所有指令,每個調用都是阻塞的。 ANR(Application Not Responding)對話框,當應用程式一定時間(通常是5秒)無響應時,Android系統将會提示終止它。 主UI在前台運作,額外的UI(如聯網)在背景運作;可以使用AsyncTask類,執行多線程。 AsyncTask類主要有三個操作: doInBackground()背景做的操作;onProgressUpdate()任務開始時的操作;onPostExecute()任務完成時的操作;
使用方法: new PostTask().execute(status); 傳遞參數到doInBackground(),在其中可以執行操作; doInBackground()的操作執行會傳回String類型,至onPostExecute(); 注意:doInBackground()是在其他線程運作的方法,不能調用UI;onPostExecute是在主UI運作的方法,可以更新界面。
代碼:
@Override
public void onClick(View v) {
String status = mEditStatus.getText().toString();
Log.d(TAG, "onClick with status: " + status); //通過
new PostTask().execute(status);
}
private final class PostTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
YambaClient yambaClient = new YambaClient("student", "password");
try {
yambaClient.postStatus(params[0]);
return "Successfully posted";
} catch (YambaClientException e) {
e.printStackTrace();
return "Failed to post to yamba service";
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Toast.makeText(StatusActivity.this, s, Toast.LENGTH_LONG).show();
}
}