子线程网络图片查看器和Handler消息处理器
来源:互联网 发布:淘宝王者代练可靠吗 编辑:程序博客网 时间:2024/04/29 22:59
1. Android not Responding(应用程序无响应) 阻塞了主线程 ANR异常
异常:
CalledFromWrongThreadException: Only theoriginal thread that created a view hierarchy can touch its views.
只有原始的线程(主线程, ui线程)才能修改view对象.
在子线程中修改view的显示状态, 会报上面异常.
2.
3.代码
因为是内部类,所以子线程可以用到主线程创建的handle
public class MainActivity extends Activity implements OnClickListener {private static final String TAG = "MainActivity";protected static final int ERROR = 1;private EditText etUrl;private ImageView ivIcon;private final int SUCCESS = 0;private Handler handler = new Handler() {/** * 接收消息 */@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Log.i(TAG, "what = " + msg.what);if(msg.what == SUCCESS) {// 当前是访问网络, 去显示图片,可用于判断是哪个线程发的信息ivIcon.setImageBitmap((Bitmap) msg.obj);// 设置imageView显示的图片} else if(msg.what == ERROR) {Toast.makeText(MainActivity.this, "抓去失败", 0).show();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ivIcon = (ImageView) findViewById(R.id.iv_icon);etUrl = (EditText) findViewById(R.id.et_url);findViewById(R.id.btn_submit).setOnClickListener(this);}@Overridepublic void onClick(View v) {final String url = etUrl.getText().toString();new Thread(new Runnable() {@Overridepublic void run() {Bitmap bitmap = getImageFromNet(url);//ivIcon.setImageBitmap(bitmap);// 设置imageView显示的图片if(bitmap != null) {Message msg = new Message();msg.what = SUCCESS; //what可用于判断是哪个线程发的信息msg.obj = bitmap;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}).start();}//-------------------------------------------------------子线程与主线程通信-------上----------------------------------/** * 根据url链接取网络抓去图片返回 * @param url * @return url对应的图片 */private Bitmap getImageFromNet(String url) {HttpURLConnection conn = null;try {URL mURL = new URL(url);// 创建一个url对象// 得到http的连接对象conn = (HttpURLConnection) mURL.openConnection();conn.setRequestMethod("GET");// 设置请求方法为Getconn.setConnectTimeout(10000);// 设置连接服务器的超时时间, 如果超过10秒钟, 没有连接成功, 会抛异常conn.setReadTimeout(5000);// 设置读取数据时超时时间, 如果超过5秒, 抛异常conn.connect();// 开始链接int responseCode = conn.getResponseCode(); // 得到服务器的响应码if(responseCode == 200) {// 访问成功InputStream is = conn.getInputStream();// 获得服务器返回的流数据Bitmap bitmap = BitmapFactory.decodeStream(is); // 根据 流数据 创建一个bitmap位图对象return bitmap;} else {Log.i(TAG, "访问失败: responseCode = " + responseCode);}} catch (Exception e) {e.printStackTrace();} finally {if(conn != null) {conn.disconnect();// 断开连接}}return null;}}
0 0
- 子线程网络图片查看器和Handler消息处理器
- 子线程网络图片查看器和Handler消息处理器
- 【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
- 网络图片查看器(子线程与消息传递)
- Android -- 网络图片查看器,网络html查看器, 消息机制, 消息队列,线程间通讯
- 四、查看网络html源码和网络图片,handler消息机制及原理,get和post请求数据
- 网络图片查看器(多线程、Handler)
- android网络编程--HttpURLConnection(结合Handler和子线程)
- 消息机制 →网络图片查看器
- 适用于android 4.0以上版本的子线程网络图片查看器
- HandlerThread,子线程中处理Handler消息
- Handler 消息处理器
- 用handler子线程向主线程发送消息和主线程向子线程发送消息
- Handler ,消息队列 和线程
- Handler消息传递机制(子线程中传递new Handler和主线程中new Handle传递消息)
- android 网络图片查看器,Handler的用法
- Handler、子线程下载图片-笔记
- 子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么?
- 磨刀:mac 上简洁搭建ejabberd 环境
- web开发常见安全问题
- 第四篇:Linux文件系统的介绍(搬移自我的新浪博客)
- Git简单教程(一)--简介
- HTTP应用:模拟灌水机器人
- 子线程网络图片查看器和Handler消息处理器
- django源码分析 -- django启动初始化过程分析
- Check Your Code First Before Looking to Blame Others
- 如何学习摩斯码
- Choose Your Tools with Care
- C++ 文件读写
- android module 添加内容
- (KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)
- Comment Only What the Code Cannot Say