activity中 处理子线程(工作线程)有两原则:

    1. Do not block the UI thread (不要阻塞UI线程)

    2. Do not access the Android UI toolkit from outside the UI thread (不要在工作线程中操作UI元素)

原因:

    *  当在UI线程中进行某些耗时的操作时,将会阻塞UI线程,一般阻塞超过5秒就会显示一个ANR对话框

    *  UI线程是非线程安全的,所以,不能在工作线程中操作UI元素。

例如以下代码

new Thread(new Runnable() { 
    @Override  
            public void run()  
            {  
                //处理耗时操作,  例如请求后台数据
                //处理ui元素,  例如给ui控件设置...... 
            }
}

以上操作都会抛如标题所示的异常:

解决此问题,可以使用android官方提供的 AsyncTask<String, Void, String> 来解决

首先可以写个内部类继承该类,

然后重写doInBackground方法和onPostExecute方法

doInBackground方法中处理一些耗时的操作, 如请求后台数据...

onPostExecute方法中处理ui元素的一些操作,如把请求得到的后台数据添加给相应的ui控件

以下是一个基本代码

/** 异步获取数据*/
	class MyTask extends AsyncTask<String, Void, String> {

		@Override
		protected void onPostExecute(String result) {
			// 对UI组件的更新操作
			// 接收的result参数,就是下面return过来的数据
			// 可以把数据处理了后,扔给ui控件
		}

		@Override
		protected String doInBackground(String... params) {
			// 耗时的操作
			// 如请求后台数据, 可以把请求到的数据return出去
			return params[0];
		}
	}