android之handler和asynctask

Handler消息机制(开线程时注意他什么时候停止,定义一个flagactivity销毁时改变,然后再线程里判断)

第一种方式:sendMessage()来执行更新ui

Private Handler Handler = new Handler(){
	//处理消息(被主线程执行)
	Public void handlerMessage(Message msg){
	String str = (String)msg.obj;
	EditText.setText(str);  //不直接放到子线程中原因:View(界面)只能由主线程更新
}
}
//在子线程中
String str -= “我是网络数据”;
//创建Message对象
Messag msg = new Messa();
Msg.obj = str;
//发送一个消息
Handler.sendMessage(msg);

第二种方式:handler.post(Runnable r)调用run方式可以执行更新ui的代码

android之handler和asynctask_第1张图片

AsyncTask(内部类)

Class MyAsyncTask	extends AsyncTask{
    //被主线程执行,在doInBackground函数前执行
    @Override
	Protected void onPreExecute(){
        //弹加载对话框
    }
        //被子线程执行,用来处理耗时行为
    @Override
    Protected String doInBackground(Integer…params){
	    Return null;
    }
    //被主线程执行,在doInBackground函数后执行
    @Override
    Protected void onPostExecute(String result){
	    //更新UI数据
    }
}

AsycTaskhandler更快,因为有线程池。

若GET url传参中有中文

URLEncoder.encode(“上海”,”UTF-8”);//中文编码

Ex:

URL url = new URL(path+"?keywords="+URLEncoder.encode(“中文”,"utf-8"));

你可能感兴趣的:(Android)