Service that runs every minute

前端 未结 3 505
借酒劲吻你
借酒劲吻你 2020-12-24 14:33

I have a service that I am wanting to execute a task every minute in the background. It does not need to execute the task whenever the phone is asleep, only when the user is

相关标签:
3条回答
  • 2020-12-24 14:44

    Do it like this

        private void ping() {
        try {
            //Your code here or call a method
        } catch (Exception e) {
            Log.e("Error", "In onStartCommand");
            e.printStackTrace();
        }
          scheduleNext();
        }
    
        private void scheduleNext() {
          mHandler.postDelayed(new Runnable() {
            public void run() { ping(); }
          }, 60000);
        }
    
        public int onStartCommand(Intent intent, int x, int y) {
          mHandler = new android.os.Handler();
          ping();
          return START_STICKY;
        }
    
    0 讨论(0)
  • 2020-12-24 14:58

    This will send an intent to your service every minute without using any processor time in your activity in between

      Intent myIntent = new Intent(context, MyServiceReceiver.class);
      PendingIntent pendingIntent = PendingIntent.getBroadcast(context,  0, myIntent, 0);
    
      AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
      Calendar calendar = Calendar.getInstance();
      calendar.setTimeInMillis(System.currentTimeMillis());
      calendar.add(Calendar.SECOND, 60); // first time
      long frequency= 60 * 1000; // in ms 
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), frequency, pendingIntent);           
    

    Adjust MyServiceReceiver.class to match your target service or activity. The documentation provides more details to fine-tune your calls like whether you want exact timing, execution at a specific time of the day ...

    0 讨论(0)
  • 2020-12-24 15:03

    You need to exit the main thread to avoid risking a ANR.

    Instead add a Handler

    Handler mHandler = new Handler();
    
    ...
    
    @Override
    protected void onHandleIntent(Intent intent) {
        Toast.makeText(this, "onhandleintent", Toast.LENGTH_SHORT).show();
        mHandler.postDelayed( ToastRunnable, 5000);
        //while(true)
        //{
    
            //one minute is 60*1000
            //try {
            //    Thread.sleep(5 * 1000);
            //    Toast.makeText(getApplicationContext(), "getting app count",          
            //Toast.LENGTH_LONG).show();
            //} catch (InterruptedException e) {
                // TODO Auto-generated catch block
            //    e.printStackTrace();
            //}
        //}
    }
    final Runnable ToastRunnable = new Runnable(){
        public void run(){
             Toast.makeText(getApplicationContext(), "getting app count",          
                   Toast.LENGTH_LONG).show();
             mHandler.postDelayed( ToastRunnable, 5000);
        }
    }
    
    0 讨论(0)
提交回复
热议问题