最近,我通过学习CodeLabs教程学习了kotlin coroutine。经过一些实践,我想知道我是否可以用java编写相同的代码。首先,我在MyKotlinFragment中编写了一个简单的kotlin代码。kt文件如下:
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
// ... some codes
private fun myKoroutineDemo(){
GlobalScope.launch {
val result1:Int = foo();
val result2:Int = bar();
val result3 = result1 + result2;
Log.e(TAG, ""+result3);
}
}
suspend fun foo():Int{
delay(2000);
var result = 2+2;
delay(500);
return result;
}
suspend fun bar():Int{
delay(2000);
var result = 7-2;
delay(500);
return result;
}
在我的片段中调用了myKotlinDemo()
;它起作用了。
接下来,我打开了一个名为MyRoutineFragment的java文件。java在同一个项目中,但我无法让它工作。
import kotlinx.coroutines.delay;
import kotlinx.coroutines.launch; // delay and launch imports arenot fount and so they are red
private suspend int foo(){ return 2 + 2; }
// the `suspend` keyword is not found by android studio, same with the bar method
private void myCoroutineDemo(){
// GlobalScope.launch don't show up here,
}
我无法将第一个文件转换为Java。我该怎么解决这个问题?
如果无法转换,那么我为什么以及如何在Java中使用协同程序?
对于简单的后台任务,我建议使用异步类Runnable。
示例调用:
mRunnable = Runnable {
// May or may not run on the UI Thread, depending on the way you call the Handler.
}
Handler mHandler = new Handler();
// Run it using "mHandler.run()". Or run it delayed:
mHandler.postDelayed(
mRunnable, // Runnable
1000 // Delay in milliseconds
)
另一种选择是使用一个真正的线程,你可以在运行中创建,或者创建一个类并从线程继承:
Thread thread = new Thread() {
@Override
public void run() {
try {
// Does not run on UI thread (non-blocking)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
thread.start();
对于Java问题中的协程,请在stackOverflow上检查此问题。
但在我的Humble看来,使用其他工具进行异步调用(例如RXjava)。你会被召回,但我想会没事的。
但是请注意不要使用AsyncWork,因为它现在已经过时了。
我使用Refught2调用kotlin协同程序的API,但API的状态代码为200、400和700。当请求API和响应状态代码为400或700时,“withTimeout”协同程序可能会异常崩溃。我想处理带有“withTimeout”协同程序的状态代码400和700响应消息,或者如何自定义“协同程序”谢谢。 这是我的密码 错误消息
我在测试在kotlin的协程里使用网络io是否会导致线程阻塞 测速结果是InputStream.read确实导致线程阻塞了,而不是挂起。 那么运行在统一个线程下的其他协程也不能运行了,我知道可以使用 这些方式把网络请求放入其他线程 但是我想知道的是如果这两个协程都必须运行在同一个线程里时,是否可以通过修改代码(比如异步io等方式)确保第一个协程能每秒打印一次,第二个协程能在接收到数据时及时打印。
使用Gradle 4.4.1和静态编程语言-DSL,我想在我的静态编程语言1.2.20项目中配置实验性的静态编程语言协程。这被证明是出奇困难的。 官方静态编程语言留档本身只提到Groovy DSL的Gradle,而不是静态编程语言。 Kotlin DSL项目有一个不起作用的协同路由示例。可能是针对较旧的Gradle版本(该脚本中的Kotlin版本为1.1.51,这本身就是可疑的)。 PS:甚至In
我使用改造2.7.1与静态编程语言协程。 我的改装服务定义如下: 此调用返回HTTP 204无内容响应,这会导致改装时崩溃: 如何使用协程处理改造中的204响应而不崩溃?
我想在我的应用程序中实现autolinktextview。github中有一个库,现在我想在我的应用程序中使用,但库语言是kotlin,我的应用程序项目语言是java。下面给出的库Url和我使用的依赖项。 https://github.com/armcha/AutoLinkTextViewV2
我正在尝试从 Java 7 调用科特林函数。我正在使用协程,这个被调用的函数正在挂起,例如: 我在版本 0.25.3 中使用了协程,我可以通过传递继续来模拟简单的 Java 回调样式 ,但是我使用的是Android,这意味着只使用Java 7。另一方面,简单的< code>Future太愚蠢了,因为我不想定期检查函数是否完成——我只想在函数完成时被调用。我真的希望避免添加新的库或许多额外的类/方法