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