java - 如何处理乱七八糟的异步操作?
问题描述
我有一个在 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()
,或其他)完成时,任务就完成了。我还没有找到任何方法让它挂起并完成它以响应完成。
我正在寻找内置的东西……或者,至少很小。不要导入一个庞大的框架来改变我在任何地方都需要这样做的方式。
解决方案
推荐阅读
- linux - Linux共享库加载并与其他进程共享代码
- html - 裁剪纵向图像并调整大小以制作横向封面css
- android - Android:意图过滤器路径模式和主机
- c# - 由 ref 传递给 void 函数的模板结构
- mysql - 与“%”一起使用时,对文本值使用 BETWEEN 的查询是排他的?
- python - Pytorch:LSTM 不学习
- php - 获取 Instagram 帖子的 JSON
- dictionary - 字典中的模糊
- python - kivmob 不会在 Android 应用程序 python kivy 中显示广告
- python - 填写表单 Selenium Python,接收弹出消息并清除填充循环