Android 如何判断当前是否正在写入文件?
我正在后台线程中保存一个相当大的位图。大约需要一秒钟。主线程将尝试将同一文件加载到画布中。如何告诉主线程等待它完成保存 编辑:Android 如何判断当前是否正在写入文件?,android,file,Android,File,我正在后台线程中保存一个相当大的位图。大约需要一秒钟。主线程将尝试将同一文件加载到画布中。如何告诉主线程等待它完成保存 编辑: 我想知道如何检查文件,而不是如何等待;对不起,误会了 由于各种原因,位图对象已从主线程的内存中删除 是否有一种标准的方法来检查文件是否正在使用,或者我是否应该使用变通方法?用于运行后台线程并在完成时更新UI。它是专门为这项任务设计的 还要注意的是,您永远不应该占用UI线程(如等待后台线程完成),因为这会阻止UI交互,并且您的UI将没有响应,或者更糟的是,您可能会得到一个
我想知道如何检查文件,而不是如何等待;对不起,误会了 由于各种原因,位图对象已从主线程的内存中删除 是否有一种标准的方法来检查文件是否正在使用,或者我是否应该使用变通方法?用于运行后台线程并在完成时更新UI。它是专门为这项任务设计的
还要注意的是,您永远不应该占用UI线程(如等待后台线程完成),因为这会阻止UI交互,并且您的UI将没有响应,或者更糟的是,您可能会得到一个Android的AsyncTask将适用于此问题: 您可以在doInBackground中更新位图,然后在PostExecute上通知主线程将其绘制到画布
编辑/他所说的这个
FileObserver
课程非常适合你的需要。它很容易使用。当观察到的文件在写入后关闭时,将调用onEvent
回调,并将CLOSE\u WRITE
作为参数。这是观察文件更改的正确答案,但在此上下文中是错误的。OP有错误的UI线程处理问题。如果你告诉主线程等待后台线程完成,那么为什么要使用后台线程呢?我想知道如何检查文件,而不是如何等待;对不起,误会了。当然,我会使用带有进度对话框的异步任务,我的观点是,您不必检查文件。使用AsyncTask保存位图并在完成时更新UI。请参阅AsyncTask文档以了解如何执行。您不必手动启动线程。AsyncTask自动处理所有这些。我正在使用AsyncTask保存文件。我并不总是知道它何时完成,因为主要活动可能在异步任务完成之前结束。例如,如果用户点击后退按钮退出主活动,然后立即再次启动主活动,它将尝试在AsyncTask完成保存之前加载文件。啊,明白了。我想说的很简单——在保存文件时,只需以特定的方式命名,例如“tmp##original#u name”。然后在完成后重命名它。这样,任何代码只需查看文件名就可以知道文件正在保存到哪个位置。是的,我会使用AsyncTask检查文件。只是想知道如何检查:)嗯?你不必检查文件。只需使用AsyncTask保存文件(自动在后台线程中运行),完成后在onPostExecute()
中更新UI。该文件应保存在AsyncTask
中。这就解决了问题。有时主线程也会被破坏(配置已更改),所以它是这样的:1。后台线程保存。2.主线程被破坏。3.已创建主线程,并尝试加载文件。4.文件未加载,因为它尚未完成保存。