【问题标题】:Android - Check if Runnable is runningAndroid - 检查 Runnable 是否正在运行
【发布时间】:2014-05-06 06:49:49
【问题描述】:

我想检查 Runnable 是否存在于我的服务中。有没有办法我可以做到这一点?

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

【问题讨论】:

    标签: java android eclipse multithreading service


    【解决方案1】:

    您可以创建一个布尔变量并检查其值是否正在运行

    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,如果它是真的,它正在运行,否则不运行

    【讨论】:

    • 如果有人使用它在另一个线程上运行某些东西,请将布尔值标记为 volatile
    • 你应该在finally{ }中设置isRunning = false
    • @HarryQ 如您所见,try{ } 的末尾有一个mHandler.postDelayed();,这意味着此方法会定期运行。所以如果我们把isRunning = false放在finally{ }中,当isRunningfalse时,第一次方法运行之后!
    • @AliKhaleqiYekta 它取决于isRunning 变量的定义。我的理解是当线程在 try 块中时,runnable 正在运行,一旦它退出,isRunning=false。考虑一下,如果mHandler.postDelayed(sendData, time); 中的延迟时间非常大。有一段时间,当前 try 块中的所有 statements 都完成了,并且延迟的 runnable 尚未启动。在这样的时期,isRunnable在我的理解中应该是false
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2021-10-27
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多