【问题标题】:if called Cancel or stop same function then start fresh if presently running in Android如果调用取消或停止相同的功能,那么如果当前在 Android 中运行,则重新开始
【发布时间】:2014-11-21 12:32:51
【问题描述】:

如果调用了一个已经在运行的函数,我如何在 Android 中取消/停止该函数,然后从头开始?

我的代码如下所示,基本上在我的应用程序中调用了一个给定的函数(Important();),而不是让该函数运行多次或阻止用户再次运行该函数(如果当前正在运行)。我想取消/停止当前正在运行的功能,然后重新开始?

我该怎么做?

代码:

public void Important() {
//Do lots of stuff
}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Important();
    }

    @Override
    protected void onResume() {
        super.onResume();
    Important();
    }

我已经尝试过以下使用布尔值的方法。但如果已经运行,它只会阻止用户再次运行该功能? (这不是我想要做的)

我想要,当函数再次被调用时。正在运行的功能已停止。然后新鲜执行

代码:

Boolean runningCode = false;
    public void Important() {
if (runningCode== false) { 
runningCode = true;
    //Do lots of stuff
runningCode = false;
    }

F.Y.I

Important() 在我的整个应用程序中被多次调用(除了上述),有时在 Important() 仍在运行时。因此需要解决我的问题:-)

重置变量和格式化页面等任务在 Important(); 中执行,它不在单独的线程上运行。这些是需要在主 UI 线程上完成的任务

【问题讨论】:

    标签: java android performance android-intent android-activity


    【解决方案1】:

    您可以在 UI 线程上使用 Handler 并向其发布消息或 Runnables。使 Important() 函数中的每个离散操作成为包含函数的消息或 Runnable(例如,resetVariables()formatThePage() 等)。每当您再次调用该函数时,只需在 Handler 上调用removeCallbacksAndMessages,它将丢弃所有尚未执行的操作。

    【讨论】:

    • 听起来棒极了,你能通过代码示例解释一下吗?
    【解决方案2】:

    好吧,我不明白你为什么要做这样的事情?

    对此没有一个简单的答案。可能可行的解决方案是这样的

    public void Important() {
    if (runningCode == false) { 
        runningCode = true;
        //Do lots of stuff
        runningCode = false;
    } else {
        // stop current code from execution
        runningCode = false;
        Important();
    }
    

    但是你必须自己编写代码来停止当前的执行,因为它可能会导致对象的损坏状态等......

    【讨论】:

    • 上面已经解释过了。这并不能满足我的需要。我想要,当再次调用该函数时。正在运行的功能已停止。然后新鲜执行
    猜你喜欢
    • 2021-06-25
    • 2012-02-11
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    相关资源
    最近更新 更多