1.消息机制的写法
[1]anr Application not response 应用无响应 主线程(UI线程)
[2] 如果在主线程中进行了 耗时的操作(比如连接网络 拷贝大数据) Threa.sleep()
[3]避免anr 可以把耗时的操作 放到子线程中 自己在创建一个线程
[4]在4.0之后 谷歌强制要求连接网络不能再主线程进行访问
[6]消息机制 Handler(助手)
//在主线程中创建一个handler
private Handler handler=new Handler(){
//这个方法是在主线程里执行的
public void handleMessage(android.os.Message msg){
//所以就可以在主线程里面更新UI了
String content=(String) msg.obj;
tv_result.setText(content);
};
};
//在点击事件中创建一个子线程
public void click(View v) {
//[2.0]创建一个子线程
new Thread(){public void run(){
try {
//[2.1] 获取源码路径
String path=et_path.getText().toString().trim();
//[2.2]创建URL 指定我们要访问的路径
URL url=new URL(path);
//[2.3]拿到httpURLconnection对象 用于接收或发送数据
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//[2.4]发送GET请求 系统默认就是GET请求
conn.setRequestMethod("GET");
//[2.5]设置请求时间
conn.setConnectTimeout(5000);
//[2.6]获取服务器返回的状态吗
int code=conn.getResponseCode();
//[2.7]如果code==200 说明返回成功
if(code==200){
//[2.8]获取服务器返回的数据 一流的形式返回的 由于把流转换回字符串是常见的操作 所以抽出一个工具类(utils)
InputStream in=conn.getInputStream();
//[2.9]使用我们定义的工具类 把in转换成String
String content=StringTools.readStream(in);
//穿件message对象
Message msg=new Message();
msg.obj=content;
//拿着我们创建的handler 告诉系统 说我要跟新ui
handler.sendMessage(msg);
//发了一条消息 消息(msg)里把数据放到msg里handlemessage方法就会执行
//[2.9.1]把流里面的数据展示到textview上
//tv_result.setText(content);
}
} catch (Exception e) {
e.printStackTrace();
}
};}.start();
}