首页 > 代码库 > Android - UI线程和异步(AsyncTask)线程

Android - UI线程和异步(AsyncTask)线程

UI线程和异步(AsyncTask)线程


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


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



Android - UI线程和异步(AsyncTask)线程