猿问

如何创建侦听状态更改的线程?

我花了整个上午的时间弄清楚Android线程和锁是如何工作的。我读过 、 、 、 、 、 、 等。我还阅读了 有关 和 方法 。但是,我仍然对应该在应用程序中使用哪种类型的线程犹豫不决。ThreadRunnableHandlerAsyncTaskExecutorsHandlerThreadThreadPoolExecutorConditionLocksynchronize

总结和简化,我的应用程序应执行以下操作:

工作线程将附加到特定的 ,该特定显示具有不同元素的 。该线程应生成与每个网格元素相对应的随机数,并将它们按顺序发送到父级,父级将隐藏它们固定的毫秒数。但是,当用户单击 中的按钮时,线程应该能够自行暂停(需要一种同步使用)。FragmentGridLayoutFragmentFragment

问题如下:

  1. 在我的情况下,哪种安卓线程是最佳的?

  2. 如果用户想要暂停线程循环内状态的更改,那么侦听它的最佳方法是什么?

目前,我正在考虑扩展原始类并用于检查状态,但我觉得这不是最合适的实现方式。Threadsynchronize()

提前致谢。


摇曳的蔷薇
浏览 137回答 1
1回答

RISEBY

我认为很适合这个问题。我不在IDE中,但我设想了一些东西,你:RxJava为网格布局中的每个单独项目(例如 a )创建一个具有随机间隔的“计时器”,并让它在完成后发出该项目。GridItemViewModel将所有这些计时器组合到一个 .List同时运行所有计时器。当每个单独的计时器完成时,它会发出其“项目”(即 )。使用它来隐藏 UI 中的相应项ViewModel当所有项目完成时,它将在您的整体中触发。当调用此任务时,您知道所有任务都已终止。onComplete()Observable所以。。。final List<Observable<Item>> tasks = gridItems()&nbsp; &nbsp; .stream()&nbsp; &nbsp; .map(item -> {&nbsp; &nbsp; &nbsp; &nbsp; final int seconds = ThreadLocalRandom.current().next(0, 5);&nbsp; &nbsp; &nbsp; &nbsp; return Observable.timer(seconds, TimeUnits.SECONDS).map(ignore -> item);&nbsp; &nbsp; &nbsp;})&nbsp; &nbsp; .collect(Collectors.toList());Observable.merge(tasks)&nbsp; &nbsp; .observeOn(AndroidSchedulers.mainThread())&nbsp; &nbsp; .subscribe(item -> {&nbsp; &nbsp; &nbsp; &nbsp; //One item has completed. Take the "item" value&nbsp; &nbsp; &nbsp; &nbsp; // and use it to update your UI.&nbsp; &nbsp; }, t -> { /*No error handling*/}, () -> /*All items finished*/);
随时随地看视频慕课网APP

相关分类

Java
我要回答