首页 > 解决方案 > 启动时停止服务

问题描述

我正在创建一个在启动时通过广播接收器运行服务的 android 应用程序。反过来,该服务运行一个 fileobserver 类来监视一个目录。在受监控的目录中创建文件时,我需要重新启动服务。是否可以在 fileobserver 类事件中重新启动服务?

标签: androidservicebootfileobserver

解决方案


您可以做这样的事情而不必重新启动您的服务(只需在检测到文件更改事件时更新服务状态)。

public class MyService extends Service {

    private FileObserver observer;

    @Override
    public int onStartCommand(final Intent intent, final int flags, final int startId) {
        init("path/to/watch");
        return super.onStartCommand(intent, flags, startId);
    }

    @Nullable
    @Override
    public IBinder onBind(final Intent intent) {
        return null;
    }

    private void init(final String pathToWatch) {
        observer = new FileObserver(pathToWatch) {
            @Override
            public void onEvent(final int event, @Nullable final String path) {
                onFileChangeEvent(path);
            }
        };
        observer.startWatching();
    }

    private void onFileChangeEvent(final String path) {
        if(condition) {
            observer.stopWatching();
            init("new/path/to/watch");
        }
    }
}

推荐阅读