当许多线程可以在progressBar上设置开/关状态时如何解决这个问题

时间:2017-07-30 20:24:28

标签: android multithreading android-progressbar greenrobot-eventbus

我有AppCompatActivity这个ViewPager现在Fragments AppCompatActivity toolbar ProgressBar我有@Subscribe(threadMode = ThreadMode.MAIN) public void onShowProgressBar(OnRequestToShowProgressBarEvent onRequestToShowProgressBarEvent) { progressIndicator.setVisibility(View.VISIBLE); } @Subscribe(threadMode = ThreadMode.MAIN) public void onHideProgressBar(OnRequestToHideProgressBarEvent onRequestToHideProgressBarEvent) { progressIndicator.setVisibility(View.INVISIBLE); } 每个Fragment片段可以使用以下调用打开/关闭:

ProgressBar

ProgressBar正在独立完成工作,在完成工作时,他们可以打开ProgressBar并在完成后将其关闭。

现在我发现这会失败,因为Frag_1可以打开{{1}}而Frag_2可以将其关闭,但Frag_1仍未完成工作且应该启用{{1}}但现在它离开了。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题我认为这可能会奏效,跟进Marconcini的评论我把逻辑放在ProgressBar这样的地方:

protected ProgressBar progressIndicator;
private final Stack<String> progressBarStack;


@Subscribe(threadMode = ThreadMode.MAIN)
public void onShowProgressBar(OnRequestToShowProgressBarEvent onRequestToShowProgressBarEvent) {
    synchronized (progressBarStack) {
        progressBarStack.push("show");
        progressIndicator.setVisibility(View.VISIBLE);
    }
}

@Subscribe(threadMode = ThreadMode.MAIN)
public void onHideProgressBar(OnRequestToHideProgressBarEvent onRequestToHideProgressBarEvent) {
    synchronized (progressBarStack) {
        progressBarStack.pop();
        if (progressBarStack.empty())
            progressIndicator.setVisibility(View.INVISIBLE);
    }
} 

在这里,3名Frags必须承诺在他们致电onHideProgressBar()

后致电onShowProgressBar()来讨价还价。

这似乎有效,但可能还有一些我想不到的空洞。