假设您正在import RNOtpVerify from 'react-native-otp-verify';
getHash = () =>
RNOtpVerify.getHash()
.then(console.log)
.catch(console.log);
startListeningForOtp = () =>
RNOtpVerify.getOtp()
.then(p => RNOtpVerify.addListener(this.otpHandler))
.catch(p => console.log(p));
otpHandler = (message: string) => {
const otp = /(\d{4})/g.exec(message)[1];
this.setState({ otp });
RNOtpVerify.removeListener();
Keyboard.dismiss();
}
componentWillUnmount() {
RNOtpVerify.removeListener();
}
中执行长时间运行的任务。但是,为了完成上述长期运行的任务,您必须从WorkerThread
那里得到一些东西。
基本上,我需要访问 UI线程,它将生成一个必须在UI线程上初始化但可以在任何线程中使用的对象。
我想做的可能是使用协程/暂停函数,其中工作线程实际上等待UI线程上的操作完成。
我如何实现这样的目标?谢谢!
以下内容代表了我要实现的目标:
UI Thread
我希望有帮助。
答案 0 :(得分:3)
您可以尝试以下操作:
1 function ()
2 {
3 }
答案 1 :(得分:0)
使用Dispatchers.Main
和Dispatchers.IO
可能会允许您使用不同的上下文,但是我们需要了解,启动新的协程并不等同于启动新的线程。协程是轻量级的线程。为了进行交流,您需要使用一些称为Channels
的概念。请参阅此link。
类似地,您可以使用线程将协程链接到另一个上的协程
答案 2 :(得分:0)
只需在您的类中实现 CoroutineScope 并将类中的变量定义为
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.Main
现在您可以在课堂上照做:-
launch(Dispatchers.Main) {
val data = async(Dispatchers.IO) {
// do your work in background thread
}.await()
//And now data return on UI thread
}
示例:-
Class MyClassFragment: Fragment(), CoroutineScope {
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.Main
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
launch(Dispatchers.Main) {
val data = async(Dispatchers.IO) {
// do your background operation
}.await()
//And now data return on UI thread
}
}
}