android多线程Handler

原创 2015年11月20日 11:46:43
package com.example.thread_1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Handler handler;
	private Button button1;
	private String result1 = null, result2 = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1 = (Button) findViewById(R.id.button1);
		//final RunClass runClass = new RunClass();
		button1.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				Run1();// //桐城市
				Run2();// /舒城

				//runClass.RunThread3();// /巢湖
				//runClass.RunThread4();// /庐江
			}
		});

		handler = new Handler() {

			@Override
			public void handleMessage(Message msg) {
				// TODO 自动生成的方法存根
				// super.handleMessage(msg);
				switch (msg.what) {
				case 1:
					if (result1 != null) {
						Log.i("result1", result1);
					}

					break;
				case 2:
					if (result2 != null) {
						Log.i("result2", result2);
					}
					break;

				default:
					Log.i("错误", "错误");
					break;
				}

			}

		};

	}// /onCreate

	public void Run1() {
		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO 自动生成的方法存根
				send1();
				Message m = new Message();
				m.what = 1;
				handler.sendMessage(m);

			}

		}).start();

	}

	// /
	private void send1() {
		// TODO 自动生成的方法存根 ////桐城市
		String target1 = "http://api.map.baidu.com/geocoder?output=json&location=31,117&key=Gl....";
		URL url1;

		try {
			url1 = new URL(target1);

			HttpURLConnection conn1 = (HttpURLConnection) url1.openConnection();

			BufferedReader buffer1 = new BufferedReader(new InputStreamReader(
					conn1.getInputStream()));
			String inputLine1 = null;
			while ((inputLine1 = buffer1.readLine()) != null) {
				result1 += inputLine1 + "\n";
			}
		} catch (MalformedURLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}

	}// /send

	public void Run2() {
		new Thread(new Runnable() {

			@Override
			public void run() {
				// TODO 自动生成的方法存根 ////舒城
				String target2 = "http://api.map.baidu.com/geocoder?output=json&location=31.3,117&key=Gl.....";
				URL url2;

				try {
					url2 = new URL(target2);

					HttpURLConnection conn2 = (HttpURLConnection) url2
							.openConnection();

					BufferedReader buffer2 = new BufferedReader(
							new InputStreamReader(conn2.getInputStream()));
					String inputLine2 = null;
					while ((inputLine2 = buffer2.readLine()) != null) {
						result2 += inputLine2 + "\n";
					}
					//Log.i("result2", result2);
					//
					// in_2.close();
					// conn_2.disconnect();
					Message m = new Message();
					m.what = 2;
					handler.sendMessage(m);
				} catch (MalformedURLException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				} catch (IOException e) {
					// TODO 自动生成的 catch 块
					e.printStackTrace();
				}
			}

		}).start();

	}

}

版权声明:本文为博主原创文章,转载请说明出处

Android多线程及异步任务消息处理机制(一)--Handler的使用

转载请注明出处: 前言         我们知道,不管在任何的语言或操作系统平台(Android系统也不例外),多线程、多进程和异步任务的相关技术地讨论都是永恒的话题,很多的开发需...
  • yegongheng
  • yegongheng
  • 2014年08月26日 12:39
  • 3170

Android多线程之图解Handler Looper MessageQueue Message

Android中的多线程可以有多种实现方式,前面我们已经讲过了封装程度较高异步任务(AnsyncTask),这一节我们来看看较为灵活的方式:Handler Looper MessageQueue Me...
  • oracleot
  • oracleot
  • 2014年02月13日 16:13
  • 6196

Android的多线程——Handler和Async Task学习笔记

首先是郭神的话:“和许多其他的GUI库一样,android的UI也是线程不安全的。也就是说,如果想要更新应用程序里的UI,则必须在主线程中进行,否则就会出现异常。对于这种情况,安卓提供了一套异步消息处...
  • u011758031
  • u011758031
  • 2015年10月02日 23:56
  • 602

(转载)android多线程及定时器处理方式

转自雨松博客: http://blog.csdn.net/xys289187120/article/details/6706952 记录一下: //Thread与Handler执行多线程 ...
  • wulong710
  • wulong710
  • 2012年05月11日 01:31
  • 1401

Android 里面的 Handler 究竟是如何保证线程安全的?

关键在于handler对应的MessageQueue是线程安全的,请看MessageQueue的message入队方法,看到synchronized关键字没有,就是她了: final boolean...
  • lxyyzm
  • lxyyzm
  • 2017年01月23日 20:54
  • 825

Java中的多线程Thread Runnable及android的handler

1.在java中,多线程一般有两种方式。简言之:一个是继承Thread类,另一个是实现runnable接口。他们之间的区别主要是在于,对于同时开启的多个对象去启动多线程的时候,继承Thread的各个对...
  • Fine1938768839
  • Fine1938768839
  • 2015年10月25日 12:52
  • 600

多线程和同步之Handler和Looper(三)

Android在android.os包中定义了两个类,它们通常是多线程应用线程间通信的基石:Handler和Looper AsyncTask对象隐藏了Handler和Looper的细节,在某些情况还是...
  • woyaochenggong774
  • woyaochenggong774
  • 2015年04月15日 14:16
  • 703

Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。

1、线程间通信机制 首先,looper、handler、messagequeue三者共同实现了android系统里线程间通信机制。如在A、B两个子线程之间需要传递消息,首先给每个子线程绑定一套han...
  • syc434432458
  • syc434432458
  • 2015年09月08日 11:32
  • 667

Android Thread,Handler,Loop,Message,HandlerThread总结

问题: 1:Handle Thread Loop,MessageQueue的关系,他们是如何绑定的?2:怎么指定线程处理Handle 发送的消息?3:HandlerThread 与Thread 的区...
  • lqb3732842
  • lqb3732842
  • 2017年02月09日 14:50
  • 469

Android Handler 四个使用实例 及HandlerThread的使用

当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程),主线程为管理界面中的UI控件,进行事件分发,比如说:点击一个Button,Android会分发事件到Button上,来响应你的...
  • a78270528
  • a78270528
  • 2015年09月06日 17:49
  • 2279
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android多线程Handler
举报原因:
原因补充:

(最多只允许输入30个字)