天天看點

Android - UI線程和異步(AsyncTask)線程

UI線程和異步(AsyncTask)線程

本文位址: http://blog.csdn.net/caroline_wendy

本文的合集已經編著成書,進階Android開發強化實戰,歡迎各位讀友的建議和指導。

在京東即可購買:https://item.jd.com/12385680.html

Android - UI線程和異步(AsyncTask)線程

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();
        }
    }