怎样在Android App退出时关闭所有线程

怎样在Android App退出时关闭所有线程,第1张

由于在Android里apk包对应的是行链悄一个组件,你退出MainActivity,并唤陆不代码这个组件运行的进程被杀。这里建议,加强对线程的管理,不要放任线程在后台跑,而不知道他的状态档渣。参考

在android中开启的线程用Thread.stop()来关闭是不会真正关闭的,当我们再次start线程的时候,会产生异常:Thread is already started.

针握衡对这个问题可以在线程的run方法里,加一个判断标志。顷皮老例如:

class TestThread extends Thread{

public void run(){

while(isTrue){

//做你要做的事。}}}在需要关闭的时候,将flag置为false: isTrue=false并且将运行的线程对象挂起然后置为null(假设开启的线程对象为mTestThread) :

mTestThread.interrupt()

mTestThread=null

再次用到的时候进行雀升如下处理即可:

if(mTestThread==null){

这个好办闭皮,这里有两个线程吧,线程A

线程mSender。

设:让线程A,监视线程mSender

第一步:

在A中定义一个变量:ExecutorService

transThread

=

Executors.newSingleThreadExecutor()

解释:transThread

官方名称是“单一线程池变量”,他是做什么的饥态昌呢,它就像我们给A的一块赛车场,用来玩遥控赛车。

第二步:

在A中再定义一个变量:

Future

transPending

解释:transPending就像我给A一个用来控制遥控赛车的遥控器一样

第三步:

在A中烂扒定义个线程mSender对象:

private

final

Runnable

mSender

=

new

Runnable()

{

public

void

run()

{

}}

解释:这是你写的对象,他就相当于我给A的一个遥控赛车。

第四步:

在A中添加如下语句:transPending

=

transThread.submit(mSender)

解释:这一步就相当于把赛车(mSender)放入场地(第一步中我们定义的transThread),并且用遥控器“transPending”来控制他。

(注:这里你是否会有疑惑,我没有写"mSender.start()"之类的语句怎么让我的赛车跑起来啊(运行run()方法),放心,有了“transPending

=

transThread.submit(mSender)”这一步,赛车是自动跑起来的,也就是mSender会自动调用run的。)

第五步:

现在你可以用遥控器“transPending”干很多事情了

transPending.cancel(true)无论线程现在是否运行中,立刻终止。

transPending.cancel(false)当前线程若没有运行(比如挂起状态)就终止它。

transPending所做的不止这些。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12329166.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存