小编Mur*_*ino的帖子

使用协程读取和复制文件

我创建了以下应用程序来说明一些疑问。我在 Github 上的示例

在此示例中,我将文件复制到另一个包。

我的疑惑如下:

  1. 并行执行任务,是否可以返回取消之前完成的值?

  2. contentResolver.openInputStream (uri)当我使用 IO 上下文时,为什么会出现“不适当的阻塞方法调用”消息?

  3. 当我读取文件条目以复制到输出时,我总是检查作业状态,以便当取消此任务时,它会立即停止,创建的输出文件被删除并返回取消异常,这是正确的吗?

  4. 我可以限制执行的任务量吗?

我的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

5
推荐指数
1
解决办法
4003
查看次数