Android 在特定时间后启动服务

Android 在特定时间后启动服务,android,Android,我在我的项目中做了一项服务,我想每2分钟开始一次。我正在使用下面的代码,但它不能正常工作 public class ScheduleSync extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { AlarmManager service = (AlarmManager) context.getSystemService(C

我在我的项目中做了一项服务,我想每2分钟开始一次。我正在使用下面的代码,但它不能正常工作

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在后端运行时。

为什么要使用
AlarmManager

只需使用线程睡眠(xxxx):


只需使用Timmer任务:而不是在我的情况下工作。。。当我在taskmanager中看到服务正在运行时。在服务中,我正在状态栏中发送通知。根据上面的de代码,它应该每2分钟发送一次通知,但它没有这样做。尝试将第二个服务更改为service,而不是broadcastreceiver。第二个不能是broadcastreceiver,因为您知道通知何时到达,所以您只需将其发送给另一个服务。我认为这在broadcastreceiver中不起作用。因为在处理广播时,应用程序会得到一组固定的时间(目前为10秒)来完成其工作。如果没有在这段时间内完成,应用程序将被视为行为异常,其进程将立即进入后台状态,以便在需要时为内存而终止。查看此项了解更多详细信息
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();
    }

}