android:当Activity和Service 都被销毁后,如何控制其中生成的线程? 50
我做了一个实验:在Activity中创建一个线程,当Activity被销毁后,线程不会停止。在Service中创建了一个线程,当Service被销毁后,线程也不会停止。那...
我做了一个实验:
在Activity中创建一个线程,当Activity被销毁后,线程不会停止。
在Service中创建了一个线程,当Service被销毁后,线程也不会停止。
那么, 如果我的程序Activity 和Service 全部被销毁了? 我如何销毁或控制里面生成的线程呢?
有人说在 Activity 和 Service 中的 onDestroy 方法 去干掉 线程, 但是,我发现, 有时候两者虽然被销毁了,但是其 onDestroy 方法并不会执行。
这可如何是好? 难道就没发控制我程序中的线程了吗? 展开
在Activity中创建一个线程,当Activity被销毁后,线程不会停止。
在Service中创建了一个线程,当Service被销毁后,线程也不会停止。
那么, 如果我的程序Activity 和Service 全部被销毁了? 我如何销毁或控制里面生成的线程呢?
有人说在 Activity 和 Service 中的 onDestroy 方法 去干掉 线程, 但是,我发现, 有时候两者虽然被销毁了,但是其 onDestroy 方法并不会执行。
这可如何是好? 难道就没发控制我程序中的线程了吗? 展开
3个回答
展开全部
线程没有被销毁的,当Activity或者Service中还有活动线程的时候,垃圾回收器是不会回收销毁Activity和Service对象的。举个例子,你可以在Activity中启动一个线程,在onDestroy中用System.out.print或者log输出一个信息,然后通过按钮调用finish方法,会发现点击以后Activity会“关闭”,但只是不可见了,但是没有调用onDestroy方法。除非你在onDestroy中关闭了线程才会关闭。
线程管理一般是通过一个布尔类型值保存其状态,通过判断它是否为空,一起来处理。这样最简单。
就是在onDestroy中处理的,你说没有调用,是因为还有子线程在运行。在onDestroy中判断线程状态,正常关闭线程以后就行了。
线程管理一般是通过一个布尔类型值保存其状态,通过判断它是否为空,一起来处理。这样最简单。
就是在onDestroy中处理的,你说没有调用,是因为还有子线程在运行。在onDestroy中判断线程状态,正常关闭线程以后就行了。
展开全部
1.首先 android 一个程序中 的activity 都是一个线程,service和activity也是一个线程
2.在activity 中启动一个子线程,当前activity finish destroy掉 子线也会运行的。
3.在service里的线程 与activity很类似 service即使停止了 线程也在运行(要先停止服务 再把最近使用的进程杀掉 线程会停止 ,如果直接杀掉进程 android会再次自动启动这个service的 此时即使再停止service服务 线程也会一直运行了除非关机)
activity finish 子线程依旧可以运行,即使程序退出了子线程也在运行 (除非在任务管理器里 把最近使用的进程杀掉)
4.JVM有很好的管理机制,系统最后会自动释放回收。作为手动回收来说,你可以调用interrupt
2.在activity 中启动一个子线程,当前activity finish destroy掉 子线也会运行的。
3.在service里的线程 与activity很类似 service即使停止了 线程也在运行(要先停止服务 再把最近使用的进程杀掉 线程会停止 ,如果直接杀掉进程 android会再次自动启动这个service的 此时即使再停止service服务 线程也会一直运行了除非关机)
activity finish 子线程依旧可以运行,即使程序退出了子线程也在运行 (除非在任务管理器里 把最近使用的进程杀掉)
4.JVM有很好的管理机制,系统最后会自动释放回收。作为手动回收来说,你可以调用interrupt
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用android 本身就有的API
HandlerThread
Looper.myLooper().quit()
Thread.join()
任务结束自动销毁,
如果你需要 随时关闭某个 比较费时的线程,那么只能你自己 去管理,比如添加线程标志位。。
HandlerThread
Looper.myLooper().quit()
Thread.join()
任务结束自动销毁,
如果你需要 随时关闭某个 比较费时的线程,那么只能你自己 去管理,比如添加线程标志位。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |