首页 > 解决方案 > 如何处理乱七八糟的异步操作?

问题描述

我有一个在 Android 应用程序中启动的任务。它与各种子任务一致,每个子任务都有一个完成。有些事情需要按顺序运行,有些事情就是一发不可收拾……但我希望一切都在启动任务本身完成之前完成。

哪些内置类提供这样的功能?现有代码(相当陈旧)使用 AsyncTask,但其中的每个调用都是阻塞的。这行得通,但是很多这些阻塞 API 已被弃用,而且我看不到任何方法可以让 AsyncTask 做我想做的事情并继续运行超过doInBackground. (另外,是的,AsyncTask 本身已被弃用。)

这大致是旧代码的样子:

public class StartupTask extends AsyncTask<Void, Void, Void> implements TaskInterface {

    protected Void doInBackground(Void... params) {

        // several steps here

        String token = FirebaseInstanceId.getInstance().getToken();
        subscribeToAllChannels(token);

        // several more steps, including using token

    }

这种获取令牌的方式现在已被弃用;我应该调用一个方法来获取稍后调用传递块的令牌。这是一个非常简化的示例:实际代码要复杂得多,并且涉及更多的异步操作,而且我无法控制它调用的许多方法。

新代码必须看起来更像这样(这只是伪代码):

protected void start() {
    getToken(new Runnable(){
        @override void onResult(String token){
            somethingElse(token, new Runnable(){
                // etc, more levels, until ultimately:
                finished();
            });
        }
    });
}

更容易阅读的东西会更好,因为我想有人比我想得更多,但我会对这个基本情况感到满意:有点像 iOS NSOperation 的并发模式,而不是实现 main/doInBackground/run我实现了一个 start 方法,然后明确地结束了任务。

在 Android/Java 上执行此操作的工具有哪些?我看过的每个班级都做出相同的假设:当doInBackground()(或run(),或其他)完成时,任务就完成了。我还没有找到任何方法让它挂起并完成它以响应完成。

我正在寻找内置的东西……或者,至少很小。不要导入一个庞大的框架来改变我在任何地方都需要这样做的方式。

标签: javaandroid

解决方案


推荐阅读