android使用多线程处理

 

使用线程处理 耗时比较长的“业务”

 

public class Main extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        findViewById(R.id.start_new_thread).setOnClickListener(new Button.OnClickListener(){
			@Override
			public void onClick(View v) {
				//new 一个新的线程对象
				NewThread newThread = new NewThread();
				//开启一个新的线程,执行doInBackground方法
				newThread.execute(12);
				System.out.println("main thread!");
			}
        });
    }
}

 

使用线程必须继承AsyncTask类 

 

/*
 * 第一个参数Integer是doInBackground方法中用的参数
 * 第二个参数Integer是onProgressUpdate方法中的参数
 * 第三个参数String是doInBackground方法的返回值类型,被onPostExecute方法调用
 */
public class NewThread extends AsyncTask<Integer, Integer, String> {

	@Override
	protected String doInBackground(Integer... params) {
		try {
			for(int i=0;i<params.length;i++){
				System.out.println("params : " + params[i]);
			}
			System.out.println("sleep 3 second");
			//会执行回调函数onProgressUpdate方法
			publishProgress(12);
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//返回的字符串被onPostExecute方法作为参数
		return "huangbiao";
	}
	
	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
		System.out.println("onPreExecute");
	}
	
	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		System.out.println("result : " + result);
		System.out.println("onPostExecute");
	}
	
	@Override
	protected void onProgressUpdate(Integer... values) {
		// TODO Auto-generated method stub
		super.onProgressUpdate(values);
		System.out.println("onProgressUpdate");
	}

}

  

 

posted @ 2012-01-06 19:22  胖鹅  阅读(341)  评论(0编辑  收藏  举报