我创建了以下应用程序来说明一些疑问。我在 Github 上的示例
在此示例中,我将文件复制到另一个包。
我的疑惑如下:
并行执行任务,是否可以返回取消之前完成的值?
contentResolver.openInputStream (uri)当我使用 IO 上下文时,为什么会出现“不适当的阻塞方法调用”消息?
当我读取文件条目以复制到输出时,我总是检查作业状态,以便当取消此任务时,它会立即停止,创建的输出文件被删除并返回取消异常,这是正确的吗?
我可以限制执行的任务量吗?
我的onCreate:
private val listUri = mutableListOf<Uri>()
private val job = Job()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//get files from 1 to 40
val packageName = "android.resource://${packageName}/raw/"
for (i in 1..40) {
listUri.add(Uri.parse("${packageName}file$i"))
}
}
Run Code Online (Sandbox Code Playgroud)
我的按钮操作:
//Button action
fun onClickStartTask(view: View) {
var listNewPath = emptyList<String>()
CoroutineScope(Main + job).launch {
try {
//shows something in the UI - progressBar
withContext(IO) {
listNewPath = listUri.map { …Run Code Online (Sandbox Code Playgroud) android asynchronous fileinputstream kotlin kotlin-coroutines