2017-08-09 96 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

嗯,你這個服務添加到清單?你是怎麼設置的,如果不是的話? –

+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

只需添加以下功能爲您服務,並把Scheduletask()在服務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,我想發送所有照片,並在 –

+0

期間重複這個asyntask它將如何看這個Scheduletask()? –

+0

你不能保證你的所有照片都在2分鐘內上傳。它取決於網絡連接。最好不要開始重複任務,你可以在onPostExecute()方法中啓動另一個asynctask來上傳另一張圖片 – AndroidGeek