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();

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


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android线程是指在Android操作系统中运行的线程线程是一种轻量级的执行单元,它可以在程序中并发地执行多个任务。Android系统中有两种类型的线程:UI线程和后台线程。 1. UI线程 UI线程是指在Android应用程序中与用户交互的主线程,也称为主线程。它负责处理用户界面的所有事件和更新UI界面。在UI线程中,应该避免执行长时间的操作,否则会导致UI界面无响应。 2. 后台线程 后台线程是指在Android应用程序中不与用户交互的线程。后台线程负责执行耗时的操作,如网络请求、文件读写等。在后台线程中执行操作可以避免UI线程的阻塞,提高用户体验。 3. 线程的创建和启动 在Android应用程序中,可以通过继承Thread类或实现Runnable接口来创建线程。创建线程的步骤如下: a. 创建Thread或Runnable对象。 b. 调用Thread类的start()方法或将Runnable对象传递给Thread类的构造方法,并调用start()方法。 4. 线程的同步 在多线程环境下,可能会出现数据竞争和线程安全问题。为了保证线程安全,需要使用同步机制。在Android应用程序中,可以使用synchronized关键字或Lock接口来实现同步。 5. 线程的停止 停止线程是一个比较复杂的问题,因为线程的停止需要考虑线程的安全性和资源释放。在Android应用程序中,可以通过设置标志位或调用Thread类的interrupt()方法来停止线程。 总之,Android线程Android应用程序中非常重要的一个概念,它可以提高程序的并发性和响应性。在编写Android应用程序时,需要注意线程的创建、同步和停止,以确保程序的正确性和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值