2015-12-17 8 views
1

нужна услуга, чтобы запускаться каждые 1 минуты, которые работают в фоновом режиме, даже если мое приложение не работаетКак запустить службу в фоновом режиме каждые 1 минуту

Вот часть кода: `

Я использую таймер для обработки называют каждую 1 минуту

final Handler handler = new Handler(); 

    Timer timer = new Timer(); 
    TimerTask hourlyTask = new TimerTask() { 

     @Override 
     public void run() { 
       handler.post(new Runnable() { 
       @SuppressWarnings("unchecked") 
       public void run() { 
        try { 

         Intent intent = new Intent(ServiceMain.this, LocationMonitoringService.class); 
         startService(intent); 


         // Toast.makeText(testServiceMain.this, "test", Toast.LENGTH_SHORT).show(); 


        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 


     } 
    }; 


    timer.schedule(hourlyTask, 3, 1000 * 10); 


} 

` Спасибо

+0

Вместо того, чтобы периодически запускать службу, я думаю, было бы лучше, если бы вы запустили службу и запустили таймер внутри службы, чтобы выполнять свою работу в установленные сроки. –

ответ

6

Android TimerTask Пример
TimerTask Представляет задание будет выполняться указанное время и будет выполняться только один раз или повторить.
Создать новый класс TimerTask.
TimerTask Имеет два метода.

--> 
1 .scheduledExecutionTime() // Repeat Task 
2 .schedule() //Only once 
Timer singleTask = new Timer(); 
Timer repeatTask = new Timer(); 

int singleTaskInterval = 3000; // 3 sec 
int repeatInterval = 10000; // 10 sec 

// this task for specified time only once it will run 
singleTask.schedule(new TimerTask() { 
@Override 
public void run() { 
// Here do something 
// This task will run 3 sec only once. 
} 
}, 1000); 

    // this task for specified time it will run Repeat 
repeatTask.scheduleAtFixedRate(new TimerTask() { 
@Override 
public void run() { 
// Here do something 
// This task will run every 10 sec repeat 
} 
}, 0, repeatInterval); 

When your activity went to destroy or stop . you should cancel this task 
--> --> 
@Override 
protected void onDestroy(){ 
super.onDestroy(); 
if(singleTask != null){ 
singleTask.cancel(); 
} 
if(repeatTask != null){ 
repeatTask.cancel(); 
} 
} 
Activity Code 
/** 
* 
* @author vijayakumar 
* 
*/ 
public class AndroidMADQAActivity extends Activity { 
/** Called when the activity is first created. */ 
Timer singleTask = new Timer(); 
Timer repeatTask = new Timer(); 
int singleTaskInterval = 3000; // 3 sec 
int repeatInterval = 10000; // 10 sec 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
singleTask.schedule(new TimerTask() { 
@Override 
public void run() { 
// Here do something 
// This task will run 3 sec only once. 
} 
}, 1000); 
repeatTask.scheduleAtFixedRate(new TimerTask() { 
@Override 
public void run() { 
// Here do something 
// This task will run every 10 sec repeat 
} 
}, 0, repeatInterval); 
} 
@Override 
protected void onDestroy(){ 
super.onDestroy(); 
if(singleTask != null){ 
singleTask.cancel(); 
} 
if(repeatTask != null){ 
repeatTask.cancel(); 
} 
} 
} 
0

Вы должны использовать Alarm Ma Nager от андроида, который начнет свой сервис в какое время вы установили в Alarm Manager,

Посмотрите на этого разработчика руководство

http://developer.android.com/training/scheduling/alarms.html

0

Для Таймера сделать так

Timer timer = new Timer() ; 
MyTimer myTask = new MyTimer (timer) ; 
int firstSart = 1000 ; // it means after 1 second. 
int period = 1000*60 ; //after which the task will repeat;(After 60 seconds) 
timer.schedule(myTask, firstSart, period) ;//the time specified in millisecond 

Создать отдельный класс для таймера & службы положить туда или вы можете пройти через конструктор в случае общего code-

import java.util.Timer; 
import java.util.TimerTask; 
/* This is scheduler class which have scheduleing operation logic*/ 
public class MyTimer extends TimerTask { 

    Timer timer ; 
    int count = 0 ; 

    public MyTimer() { 

    } 

    public MyTimer (Timer timer) { 
     this.timer = timer ; 
    } 

    public void toDo() { 
     Intent intent = new Intent(ServiceMain.this, LocationMonitoringService.class); 
     startService(intent); 
    } 

    @Override 
    public void run() { 
     toDo() ; 

     if (count > 10) { 
      // this is the condition when you want to stop the task here i have not incriges the value of count 
      //so it will run in infinite loop. 
      timer.cancel() ; 
     } 
    } 

} 
0

использования в код

Timer timer ; 
    int count = 0 ; 

if (count > 10) { 
      // Enter your code 
      //It will run N number of time 
      timer.cancel() ; 
     } 
Смежные вопросы