Handler消息机制(开线程时注意他什么时候停止,定义一个flag,activity销毁时改变,然后再线程里判断)
第一种方式: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的代码
AsyncTask(内部类)
Class MyAsyncTask extends AsyncTask<Integer,Void,String>{
//被主线程执行,在doInBackground函数前执行
@Override
Protected void onPreExecute(){
//弹加载对话框
}
//被子线程执行,用来处理耗时行为
@Override
Protected String doInBackground(Integer…params){
Return null;
}
//被主线程执行,在doInBackground函数后执行
@Override
Protected void onPostExecute(String result){
//更新UI数据
}
}
AsycTask比handler更快,因为有线程池。
若GET url传参中有中文
URLEncoder.encode(“上海”,”UTF-8”);//中文编码
Ex:
URL url = new URL(path+"?keywords="+URLEncoder.encode(“中文”,"utf-8"));