Android - 检查Runnable是否正在运行

5

我想在我的服务中检查Runnable是否还存活着。有没有一种方法可以做到这一点?

private Runnable sendData = new Runnable() {
    public void run() {
        try {
            superToast.show();
            screenOn();
            vibrate();
            mHandler.postDelayed(sendData, time);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
1个回答

13

您可以创建一个布尔变量并检查它的值,以确定它是否正在运行

boolean isRunning = false;

private Runnable sendData = new Runnable() {
    public void run() {
        try {
            isRunning = true;
            superToast.show();
            screenOn();
            vibrate();
            mHandler.postDelayed(sendData, time);
        } catch (Exception e) {
            e.printStackTrace();
            isRunning = false;
        }
    }
};

现在检查isRunning的值,如果为true则正在运行,否则不在运行。


4
如果有人使用这个来在另一个线程上运行某些东西,将布尔值标记为volatile。 - William Reed
1
你应该在 finally{ } 中设置 isRunning = false - HarryQ
@HarryQ,你看到了,在try{ }的结尾有一个mHandler.postDelayed();,这意味着该方法会定期运行。因此,如果我们在finally{ }中放置isRunning = false,那么当isRunningfalse时,该方法第一次运行后就会停止! - YektaDev
@AliKhaleqiYekta 这取决于isRunning变量的定义。我的理解是当线程在try块中时,可运行状态为正在运行,一旦退出,则isRunning=false。请考虑这种情况,如果mHandler.postDelayed(sendData, time);中的延迟时间非常长。在当前try块中的所有语句完成之前,有一个时间段,延迟的可运行状态尚未启动。在这种情况下,我的理解是isRunnable应该为false - HarryQ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接