2013-03-28 74 views
0

我已在我的项目中提供服务,并且我希望在每2分钟后开始启动。我正在使用下面的代码,但它不能正常工作。在特定时间后启动服务android

public class ScheduleSync extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

     Intent i = new Intent(context, StartMyServiceReceiver.class); 
     PendingIntent pending = PendingIntent.getBroadcast(context, 0, i,PendingIntent.FLAG_CANCEL_CURRENT); 
     Calendar cal = Calendar.getInstance(); 
     service.setInexactRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), 60000*2, pending); 

    } 

} 



public class StartMyServiceReceiver extends BroadcastReceiver 
{  
    public void onReceive(Context context, Intent intent) 
    { 
     Toast.makeText(context, "receive broadcast", Toast.LENGTH_LONG).show(); 
     Log.d("StartMyServiceReceiver", "receive broadcast"); 
     Intent service = new Intent(context, myservice.class); 
     context.startService(service); 
    } 
} 

好心帮我解决这个问题。当我看到taskmanager myservice正在后端运行时。

+1

只需使用蒂莫任务:http://stackoverflow.com/q/6477608/1168654和http://stackoverflow.com/q/2161750/1168654 – 2013-03-28 06:40:36

回答

0

为什么要用AlarmManager

只需使用Thread.sleep(xxxx)

public class ScheduleSync extends BroadcastReceiver{ 
    private Context context; 
    private void startOtherService(){ 
     Intent i = new Intent(context, StartMyServiceReceiver.class); 
     context.startService(i); 
    } 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     this.context = context; 
     new Thread(new Runnable(){ 
      public void run(){ 
       try{ 
        Thread.sleep(2*60*1000); 
        startOtherService(); 
       }catch(InterruptedException e){ 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 
    } 

} 
+0

不工作我的情况...当我看到taskmanager服务正在运行。在服务我在状态栏发送通知。根据上面的代码,它应该每2分钟发送一次通知,但不这样做。 – user2064024 2013-03-28 07:12:21

+0

尝试将第二个服务改为service而不是broadcastreceiver。第二个不能是广播接收器,因为你知道通知何时到达,所以你只需将它发送给另一个服务 – JackTurky 2013-03-28 07:15:03

+0

我认为这在广播reciver中不起作用。因为在处理广播时,应用程序被赋予固定的一组时间(目前为10秒)以完成其工作。如果在那段时间内没有完成,应用程序被认为是行为不端,并且它的进程立即被抛入后台状态,如果需要的话会被杀死。检查此更多详细信息http://stackoverflow.com/a/7460334/1168654 – 2013-03-28 07:26:13