Android多线程基础实例

最近在学习Android编程中遇到一个系统错误:android.os.NetworkOnMainThreadException,按字面意思理解就是在主线程上进行网络操作。既然不能在主线程上操作,那就在子线程上进行啊。由于之前没有写过java程序,于是就写了一个demo来进行测试,最终完成如下:

实现目的:

    点击按钮,Textview显示ID值(ID值一秒更新一次);

界面:

    一个Textview(我直接使用的helloworld的Textview)

    一个Button

实现:

    1、设置按钮监听:

button.setOnClickListener(new buttonOnclickListener());

    2、监听(通过内部类实现):

public class buttonOnclickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.button:
				isRunning=!isRunning;
				changeID();
			}
		}
	}

3、实现方法(changeID()):

	private void changeID(){
		Toast.makeText(getApplicationContext(), isRunning.toString(), Toast.LENGTH_SHORT).show();
		new Thread(){
			@Override
			public void run(){
				try {
					while(isRunning)
					{
						Thread.currentThread().sleep(1000);
						if (i<5000){
							i+=1;
						}else {
							i=0;
						}
						Message msg=new Message();
						msg.what=0;
						msg.obj=i;
						mHandler.sendMessage(msg);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				
			}
		}.start();
	}


4、线程通信

private Handler mHandler=new Handler(){
		public void handleMessage(Message msg){
			String string=msg.obj.toString();
			textView.setText(string);
		}
	};


5、运行界面如下:

点击按钮前

点击按钮后

6、完整代码如下:

package com.example.threaddemo;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	private Button button;
	private TextView textView;
	private Boolean isRunning=false;
	//private Handler mHandler=new Handler();
	private int i;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		button=(Button)findViewById(R.id.button);
		textView=(TextView)findViewById(R.id.txt_hello);
		button.setOnClickListener(new buttonOnclickListener());
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	private void changeID(){
		Toast.makeText(getApplicationContext(), isRunning.toString(), Toast.LENGTH_SHORT).show();
		new Thread(){
			@Override
			public void run(){
				try {
					while(isRunning)
					{
						Thread.currentThread().sleep(1000);
						if (i<5000){
							i+=1;
						}else {
							i=0;
						}
						Message msg=new Message();
						msg.what=0;
						msg.obj=i;
						mHandler.sendMessage(msg);
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
				
			}
		}.start();
	}
	
	private Handler mHandler=new Handler(){
		public void handleMessage(Message msg){
			String string=msg.obj.toString();
			textView.setText(string);
		}
	};
	
	public class buttonOnclickListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.button:
				isRunning=!isRunning;
				changeID();
			}
		}
	}
}



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值