一段时间后,FileObserve服务线程不会运行。如何让它一直运行?

时间:2017-10-03 11:21:45

标签: android

我正在运行FileObserve应用程序来检测文件夹中的新文件创建。下面是我用来启动FileObserve的服务的onStartCommand的片段。

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
                Thread Scan = new Thread() {
                    public void run() {
                        Log.i(TAG,"Started");
                        fileObserver = new FileObserve(Environment.getExternalStorageDirectory().getPath(),FileObserve.CREATE){
                            public void onEvent(int i, String s){
                                try {

                                    //Modify files


                                } catch (Exception e) {

                                }
                            }
                        };

                        fileObserver.startWatching();
                    }
                };
        Scan.start();

        return START_REDELIVER_INTENT;
    }

当我运行应用程序时,它会在后台运行一段时间并检测到任何新文件的创建。这可以通过在设置中运行服务菜单以及在创建新文件时由应用程序完成的一些文件修改来验证。

但过了一会儿就停止了在后台运行。此时创建的任何新文件都不会进行任何修改。还有在列出的运行服务菜单中看不到的服务。但有时候它会重新启动,但永远不会启动。

是否可以使用一些服务标志来解决这个问题? 如果不是最新的选择?在OnDestroy()中发送广播会起作用吗?

1 个答案:

答案 0 :(得分:0)

而不是在服务中使用线程。只需在onStart()中调用它,如下所示。

@Override
public void onStart(Intent intent, int startid) {   
                 Log.i(TAG,"Started");
                    fileObserver = new FileObserve(Environment.getExternalStorageDirectory().getPath(),FileObserve.CREATE){
                        public void onEvent(int i, String s){
                            try {

                                //Modify files


                            } catch (Exception e) {

                            }
                        }
                    };

                 fileObserver.startWatching();

    }

这将解决问题。但我不确定,为什么会这样。如果有人能说出这种行为的原因,我会很高兴。

使用的来源:How do you implement a FileObserver from an Android Service