• Android FileObserver 的使用与简要原理


    FileObserver 是一个 Android 类,用于监视指定文件或目录的更改。它可以帮助开发者实时检测文件或目录的创建删除重命名修改等操作。通过使用 FileObserver,开发者可以及时响应这些文件系统变化,并在相应的事件发生时执行特定的操作。


    FileObserver 的使用:

    1. class MainActivity : AppCompatActivity() {
    2. var fileObserver: FileObserver? = null
    3. override fun onCreate(savedInstanceState: Bundle?) {
    4. super.onCreate(savedInstanceState)
    5. val path = "/sdcard/xxxx/xxxx" // 监视的文件或目录路径
    6. fileObserver = object : FileObserver(path) {
    7. override fun onEvent(event: Int, path: String?) {
    8. when (event) {
    9. CREATE -> {} // 文件或目录创建
    10. DELETE -> {} // 文件或目录删除
    11. DELETE_SELF -> {} // 自身删除
    12. MODIFY -> {} // 文件或目录修改
    13. MOVED_FROM -> {} // 移动或重命名
    14. MOVED_TO -> {} // 移动或重命名后
    15. ATTRIB -> {} // 文件或目录属性变化
    16. }
    17. }
    18. }
    19. fileObserver?.startWatching()
    20. }
    21. override fun onDestroy() {
    22. super.onDestroy()
    23. fileObserver?.stopWatching()
    24. }
    25. }

    注意:需要确保监听的文件路径读写权限后程序才能正常运行


    FileObserver 在底层通过 JNI(Java Native Interface)与 C/C++ 代码进行交互,调用了系统的 inotify 接口。当 FileObserver 实例启动后,它会创建一个底层的 inotify 实例,并请求内核对指定文件或目录进行监视

    当监视的文件或目录发生变化时,内核会生成相应的事件,并将事件信息传递给 FileObserver。 FileObserver 将捕获这些事件并触发相应的回调方法,如 onEvent()。


    需要注意的是,FileObserver 在底层的实现使用了 Linux 的特定功能,因此只能Android 上使用,而不适用于其他操作系统或平台。

  • 相关阅读:
    UDS诊断系列介绍03-DCM
    k8s-实战——Harbor镜像仓库的部署
    基于变分自动编码器VAE的电池剩余使用寿命RUL估计
    Servlet
    KeyBERT和labse提取字符串中的关键词
    SpringBoot面试题6:Spring Boot 2.X 有什么新特性?与 1.X 有什么区别?
    [leetcode] 264. 丑数 II
    freeswitch sofia协议栈调试
    设计模式:备忘录模式
    Nginx负载均衡和动静分离实例
  • 原文地址:https://blog.csdn.net/weixin_47592544/article/details/132627060