如何执行后台任务以命中多个API - AndroidX



我想命中多个 API 以从服务器获取一些数据,但是当我尝试同时命中多个 API 时,它有机会相互中断,所以有时其中一个 API 不起作用,有什么解决方案吗?

我在OnCreate方法上设置了它

//API1
mainActivity_.rncryptorLoadGameRating(mGameID);
//API2
mainActivity_.rncryptorLoadGameRatingComment(mGameID, 0);

我将首先进行一些假设,因为问题的定义不是很清楚。

我不确定两个不同的连续 API 调用如何相互作用并相互干扰。同一实例中的两个调用很可能处于某种争用状态。这意味着您的代码中存在某些内容。在架构方面,两个不同的 API 调用绝不能相互中断,也绝不能相互中断

如果两个方法/API 的并发调用可能会相互中断,一种天真的方法是使用在 java 和 GuardedBy("this"( 中使用相同的内在锁锁定方法 rncryptorLoadGameRating(mGameID( 和 rncryptorLoadGameRatingComment(mGameID, 0(,这样,两个方法将不会并行调用,它们将按顺序调用。只有一个 API 调用可以具有锁定和修改对象的状态并释放锁定,以便其他 API 可以拥有它并使用对象状态。据我了解,两个方法的并行调用在对象状态mainActivity_处于竞争状态,这就是它们相互中断的原因。

public class MainActivity {
@GuardedBy("this") int yourStateVariable;
synchronized void rncryptorLoadGameRating(int mGameID){
//Definition of method
}
synchronized void rncryptorLoadGameRatingComment(int mGameID, int number){
}
}

您需要使用锁保护状态变量。此外,将您的状态封装在 api 方法的对象中。性能方面,这不是一个好方法,但工作正常。您可能还想查看以下内容:互斥锁,信号量或锁存器,Java中的未来承诺。我也可以在这里为他们写例子。但是,这将太多了。还请检查线程限制和堆栈限制以获得更好的性能。

如果是 Kotlin 代码,我建议签入协程。

最新更新