2 acmen99 Acmen99 于 2016.03.01 15:11 提问

Activity中开启线程进行耗时操作,怎么在Activity销毁时结束正在进行的线程

如题,在Android开发中,在activity中开启线程去执行耗时操作,有时候任务还没执行完Activity就被关闭了,有没有大神指导怎么在activity关闭的时候也杀死线程!有时候是多个线程使用线程池管理,怎么在activity销毁时关闭线程池里的所有线程!求高手指点迷津!

5个回答

vcommon
vcommon   2016.03.01 15:49

1.线程里必须有办法退出
2.onResume里建立线程
3.onPause里设置线程结束标志结束线程

qsjh898
qsjh898   2016.03.01 16:04

如果这个线程最终会自己消亡,那么你其实没有必要在Activity被销毁的时候去停止它。
你要做的,应该是防止这个线程和Activity之间挂钩,因为会引起内存泄露。

kidass_x
kidass_x 回复qsjh898: 谢谢你的回复;可以理解为成员变量之类的吗?方法内的局部变量不算吧;
2 年多之前 回复
qsjh898
qsjh898 回复Kav3000: 如果你的Activity持有该线程对象的引用,或者该线程对象持有该Activity对象的引用
2 年多之前 回复
kidass_x
kidass_x 普通的thread运行结束会自行消亡吧,这个挂钩是指什么场景?
2 年多之前 回复
ji1ruan
ji1ruan   2016.03.02 09:55

这种线程不要写在activity里,不要跟activity产生关系,由线程自己控制结束,不要用activity控制

Acmen99
Acmen99   2016.03.02 16:36

使用socket编程,不在activity里面开启线程怎么建立连接!

crazy1235
crazy1235   Ds   Rxr 2016.03.04 10:14

你可以用service来写。。。线程会自动销毁。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用Activity类中的公共方法在UI线程中进行耗时操作
UI线程中的耗时操作
Activity中控制线程和防止线程重复开启的解决办法
在android开发中,Activity里面的子线程在Activity  onDestroy()后并没有销毁,而是一直在运行。解决办法有两种,一种通过service开启线程,并控制线程周期。第二种是本文要讲的:通过控制变量控制线程的运行。 具体是定义一个boolean全局变量threadRun,由这个变量控制线程中的//do something 循环,想执行线程功能时将threadRun=tru
[Android实例] 安卓线程关闭,销毁activity时注意关闭线程
注意:自己开的线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭自己开的线程或者通过boolean的方式让自己开的线程结束运行。自己开的线程有for循环的要更加注意。 废话不说,上例子。 package com.zsh; import android.app.Activity; import android.os.Bundle; import androi
[Android实例] 销毁activity时注意关闭线程
注意:自己开的线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭自己开的线程或者通过boolean的方式让自己开的线程结束运行。自己开的线程有for循环的要更加注意。 废话不说,上例子。 package com.zsh; import android.app.Activity;   import android.os.Bundle;   import and
activity退出,销毁线程
在Android开发中,经常会用到线程和Timer,如果没有主动关闭它们,当程序结束时,线程并没有被销毁,而是一直在后台运行着,当我们重新启动应用时,又会重新启动一个线程,周而复始,你启动应用次数越多,开启的线程数就越多,你的机器就会变得越慢。还会导致意想不到的错误。 1、线程的销毁 Hanlder是线程与Activity通信的桥梁,利用handler接收到任务线程,放到任务队列里面派对执行。
Android学习-- 销毁activity时注意关闭线程
在Activity开启的子线程并不会自动随Activity的destroy而关闭,所以必须手动去关闭子线程或者通过boolean的方式让子线程结束运行。开启的子线程有for循环的要更加注意。 而且还要注意定时器的关闭,因为定时器就相当于自动开辟了一条线程 这是关闭定时器的程序 public void onDestroy() { // 当结束程序时关掉Timer timer.cancel
Activity已销毁,创建的线程未回收问题
今天在做新模块测试时发现了一个严重的问题,当一个activity开启一个线程时,如果当前activity调用finish()函数不会关闭当前创建的线程。对于每个新建activity,如果activity中的线程发生内存泄漏。在Java中线程时垃圾回收机制的根源,也就是说,在运行系统中DVM虚拟机总会使硬件持有运行状态的进程的引用,结果导致处于运行状态的线程将永远不会回收。因此你必须为你的后台线程实
Android退出一个activity后取消掉其中的异步线程AsyncTask
当进入一个详细页面后,开启异步线程联网获取数据,当数据还没获取完成时,点击后退关闭这个activity页面后,也同时关闭其中开启的异步任务 public class Task extends AsyncTask { @Override protected Void doInBackground(Void... path) { // Task被取消了,马上退出循环
Activity关闭子线程是否随着关闭?
问题:在开发中遇到关闭一个页面(Activity),里面的线程是否随着关闭? 回答:不会(经过测试) 当在开发中遇到需要在activity关闭的时候关闭线程时: 1.可以在线程的Run方法里面设置标记手动关闭. (使用停止的标记位,那么可以保正在真正停止之前完整的运行完) 2.调用Thread.stop()方法也可以,但是会出问题(使用Thread.stop方法停止线程,不能保证这个线程是
有关【线程】销毁的理解
建议:当Activity或者fragment退出的时候,把线程关闭,如果依然想开线程可以调用IntentService(里面运用handlerThread)。 如果不关闭线程,线程会继续开着,那要看这个线程里面有没有持有跟这个Activity相关的实例 ,如果有activity不会被销毁 只是不可见而已 ,造成【内存泄露问题】 因为线程只有所有任务执行完毕才会关闭。。。。。。。 如果要