在主线程中不能连接网络
2016-07-04 11:17
393 查看
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();
}
[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();
}
相关文章推荐
- TCP流量控制和拥塞控制
- HTTP 1.0 & 1.1
- iOS-App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure
- PHP和HTTP相关的函数
- 已封装了的OkHttpUtils
- Java解析网络数据流的三种特殊方法
- android网络通信之WIFI教程实例汇总
- WWW的核心——HTTP协议
- HTTP协议状态码的含义
- HTTP协议详解
- 通过 http 协议上传文件
- HTTP协议-什么是HTTP协议
- Neural Networks and Deep Learning 学习笔记(八)
- Android操作HTTP实现与服务器通信
- Android开发之HTTP访问网络
- 使用javascript原生XMLHttpRequest对象进行ajax交互
- http协议头字段分析
- 怎样利用网络来赚钱
- 计蒜之道复赛F题 菜鸟物流的运输网络(网络流)
- TCP/IP四层模型