繁体   English   中英

在android中重复启动和停止一个线程

[英]start and stop a thread repeatedly in android

这里我有一个名为Method1()的方法,它将在方法被称为奇数时间时启动一个线程并停止相同的称为偶数时间。 当我通过Button.onClick事件调用该方法时,下面的代码段工作。 这是暂停和恢复线程的正确方法吗? 我的方法线程安全吗?

Thread sampleThread = null;
..
..
..
private void Method1(){

    if(sampleThread == null){

        sampleThread =   new Thread(){
            @Override
            public void run() {

                while(true) {

                    Log.d(TAG,"Inside Thread");

                }
            }
        };
        sampleThread.start();

    }else {

        sampleThread.interrupt();

    }
}

您可以使用布尔变量并将其设置为while循环。 像这样。

Boolean isActive = true;

然后,

while(isActive ) {
   Log.d(TAG,"Inside Thread");
}

因此,当您将isActive更改为false时,线程将停止。

如果经常调用Method1 ,我建议你最好设置一个标志,让它恢复线程,并禁用它来暂停线程。因为如果你经常创建和销毁一个线程,很多CPU和内存将被浪费。你可以使用这样:

public class MyThread extends Thread{
        volatile boolean isRunning = true;//make sure use volatile keyword
        @Override
        public void run() {

            while(isRunning) {

                Log.d(TAG,"Inside Thread");

            }
        }
        public void setRunning(boolean running){
            this.isRunning = running;
        }
    };

当你想暂停时,调用thread.setRunning(false) ,重新启动它,调用thread.setRunning(true)

如果不是那么频繁,你的解决方案几乎没问题,但我认为你应该补充一下

sampleThread = null

sampleThread.interrupt(); ,否则当你下次暂停它时,它会中断一个非活动线程,可能会抛出异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM