2017-10-03 4 views
0

私は、フォルダ内の新しいファイルの作成を検出するためにFileObserveアプリケーションを実行しています。以下は、FileObserveを起動するために使用するサービスのonStartCommandのスニペットです。FileObserve Serviceスレッドはしばらくしてから実行されません。それを常に稼働させておく方法は?

@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()でブロードキャストを送信することはできますか?

+0

IntentServiceが異なる@rexあなたも、この使用 – rex

+0

のためのサービスを必要としない、そこにあるファイルを修正しながら、例外のいくつかの種類もまた、これらのタスクのためのIntentServiceを使用してみたりすることもあり目的。とにかくhttps://stackoverflow.com/questions/7265906/how-do-you-implement-a-fileobserver-from-an-android-serviceを使って解決しました – abhinandanbr

答えて

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

関連する問題