2017-08-09 8 views
0

周期的なバックグラウンドサービスを2分で作成したいと考えています。私は自分のアプリケーションへのログインを承認したときにサービスを開始し、私はログアウト時にサービスを殺したいか、私は自分のアプリケーションAndroid - 定期的なバックグラウンドサービス

を殺したとき、私はこれを試してみましたが、それは動作しません:

public class BackgroundService extends Service { 

    public Context context = this; 
    public Handler handler = null; 
    public static Runnable runnable = null; 

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

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "Service created!", Toast.LENGTH_LONG).show(); 

     handler = new Handler(); 
     runnable = new Runnable() { 
      public void run() { 
       Toast.makeText(context, "Service is still running", Toast.LENGTH_LONG).show(); 
       handler.postDelayed(runnable, 10000); 
      } 
     }; 

     handler.postDelayed(runnable, 15000); 
    } 

    @Override 
    public void onDestroy() { 
     /* IF YOU WANT THIS SERVICE KILLED WITH THE APP THEN UNCOMMENT THE FOLLOWING LINE */ 
     //handler.removeCallbacks(runnable); 
     Toast.makeText(this, "Service stopped", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onStart(Intent intent, int startid) { 
     Toast.makeText(this, "Service started by user.", Toast.LENGTH_LONG).show(); 
    } 
} 
+0

さて、あなたがマニフェストにこのサービスを追加したのをScheduletask()を置きますか?これをどうやって設定しましたか? –

+0

@ cricket_007はいandoridマニフェストでこのservisを追加します –

+1

10000ms!= 2分 – Toorop

答えて

0
int timerCount = 1; 
private long period=120; 

for (; timerCount <= period; timerCount++) { 
     try { 
     Thread.sleep(1000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     if (timerCount == period) { 
      stopSelf(); 
     } 
} 

コードのタイマーとしてこのコードを使用します。

@Tooropが正しいです。トーストの代わりにログを印刷してみてください。

0

はちょうどあなたのサービスでは機能の下に追加して、あなたのサービスonCreate()方法で

private final static int INTERVAL = 1000 * 60 * 2; 
    private void Scheduletask() 
    { 
     final Handler handler = new Handler(); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       Log.d("Scheduletask","Running ................."); 
       new RetrieveDataTask().execute(); 
       handler.postDelayed(this, INTERVAL); 
      } 
     }); 
    } 

    private class RetrieveDataTask extends AsyncTask<InputStream, Void, String> { 

     protected String doInBackground(InputStream... urls) { 
      return "Task Executed"; 
     } 

     protected void onPostExecute(String result) { 
      Log.d("Scheduletask",result); 
     } 
    } 
+0

このサービスでは、私はasytaskで写真を送っていきたいと思います。そして、すべての写真を送って、このasynthを期間中に繰り返していきたいと思っています –

+0

そして、このScheduletask()を見ますか? –

+0

あなたはすべての写真が2分以内にアップロードされるかどうかを保証することはできません。ネットワーク接続に依存します。あなたは別のasynctaskを起動して別の画像をアップロードすることができます – AndroidGeek

関連する問題