Android 线程Thread的释放

线程的控制一直是一个头疼的问题,控制不好的话,内存占用特别的厉害,那么有什么方法能让没有用的线程释放掉呢?

也许在有点需求中会同时开启几个线程来干某些事,但是在这些事情忙完后,Android自己不会立即将使用完的垃圾迅速回收掉,也就是说,咱们new一个线程,就会多出一份垃圾,一个两个的无关紧要,太多了或者设备性能不好时,问题还是会出现的。Thread的控制,还是咱们自己控制的好。

下面是现在我用这的方案,以一个内部类的方式实现Thread(例子中的MyThread)

public class MainActivity extends Activity {
	/**
	 * 唯一的全局线程变量
	 */
	private volatile MyThread myThread;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		if (null != myThread) {
			myThread.stopMyThread();
		}
		myThread = new MyThread(10); // 十秒以后启动线程
		myThread.start();
	}
	@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;
	}
	/**
	 * 以内部类的方式继承Thread
	 */
	class MyThread extends Thread {
		private int daily = 0;
		public MyThread(int daily) {
			this.daily = daily;
		}
		public void stopMyThread() {
			MyThread tmpThread = myThread;
			myThread = null;
			if (tmpThread != null) {
				tmpThread.interrupt();
			}
		}
		public void run() {
			if (myThread == null) {
				return; // stopped before started.
			}
			try {
				for (int i = 0; i < daily; i++) {
					sleep(1000);
				}
				Thread.yield(); // let another thread have some time perhaps to stop this one.
				if (Thread.currentThread().isInterrupted()) {
					throw new InterruptedException("Stopped by ifInterruptedStop()");
				}
				// do something
				System.out.println("--------1----------");
				System.out.println("--------2----------");
			} catch (Throwable t) {
				System.out.println("--------Throwable--------" + t);
				System.out.println("--------over----------");
				// log/handle all errors here
			}
		}
	}
}

接着在所在类中定义一个全局变量,
private volatile MyThread myThread;
每次在使用 MyThread  线程时,先进行一次判断再去创建线程
if (null != myThread) { 
myThread.stopMyThread(); 

myThread = new MyThread(10); //十秒以后启动线程
myThread.start();

这样的话,自己去控制何时去释放内存,通过自己掊异常的形式去释放内存,释放的干干净净。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值