Android 线程详解

我们创建了线程在界面Destroy的时候必须将其Stop掉,
如果写的不是死循环那还好,当它运行结束时,系统会帮我们擦屁股
如果写的是死循环恭喜你,它将一直运行下去...
我们要牢记,界面被销毁,线程不一定会被销毁
不信你就打Log看看,虽然界面退出,仍然在打Log


当你再打开程序时,现在的那个Thread就不是原先那个Thread的,因为是Thread是new出来的啊
所以,你再执行时就有2个线程在跑哦。

标准的线程写法是

public class MainActivity extends Activity {
	//控制打开关闭线程的按钮
	Button mBtnStart, mBtnEnd;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mBtnStart = (Button) findViewById(R.id.start_main);
		mBtnEnd = (Button) findViewById(R.id.end_main);
		//创建线程
		MyThread mThread = new MyThread();
		mBtnStart.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				mThread.setStart();
			}
		});
		mBtnEnd.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				mThread.setStop();
				}
			
		});
	}

	//Destroy的时候将其Stop掉
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		mThread.setStop();
	}
}	
public class MyThread extends Thread{
		
		//线程开关
		boolean flag;
		//留出一个控制线程开启的接口
		public void setStart(){
			flag = true;
			start();//启动线程
		}
		//留出一个控制线程关闭的接口
		public void setStop(){
			flag = false;
		}
		
		@Override
		public void run() {
			int i = 0;
			//true就跑起线程
			while(flag){
				try {
					Thread.sleep(1000);
					i++;
					Log.i("log", "MyThread if running ---->" + i);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
}

如果是多线程或者线程不是死循环就一般不用考虑,但是你是不是要精益求精呢?...

请关注下一篇,线程与服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值