AlarmManager定时器设置
目标:实现每隔20分钟请求一次
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import java.util.Calendar;
public class AlarmManagerUtils {
private Context context;
public static AlarmManager alarmManager;
public static PendingIntent pendingIntent;
private Calendar calendar;
private AlarmManagerUtils(Context aContext) {
this.context = aContext;
}
private static AlarmManagerUtils instance = null;
public static AlarmManagerUtils getInstance(Context aContext) {
if (instance == null) {
synchronized (AlarmManagerUtils.class) {
if (instance == null) {
instance = new AlarmManagerUtils(aContext);
}
}
}
return instance;
}
public void getAlarmManagerWork( String productIds, String channelCode ) {
calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 50);
calendar.set(Calendar.SECOND, 00);
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmManagerService.class);
Bundle bundle = new Bundle();
bundle.putString("productIds", productIds);
bundle.putString("channelCode", channelCode);
intent.putExtras(bundle);
pendingIntent = PendingIntent.getService(context, 0, intent, 0);
//倒计时一个小时
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 60 * 60 * 1000, pendingIntent);
}
}
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import com.lcy.lopdatacloud.LopDataCloud;
public class AlarmManagerService extends Service {
public AlarmManagerService() {
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
/**
* 注意 :不要在此处直接new Thread
* onStartCommand 的启动会执行很多次,如果长期打开,会多次new新线程,会造成内存溢出
*/
if (intent != null && intent.getExtras() != null) {
Bundle bundle = intent.getExtras();
String productIds = bundle.getString("productIds");
String channelCode = bundle.getString("channelCode");
//执行下一步操作,,,,如果修改UI,加异步操作
init(this, productIds, channelCode);
stopSelf();
}
return super.onStartCommand(intent, flags, startId);
}
}
调用方式
AlarmManagerUtils.getInstance(context).getAlarmManagerWork(productIds, channelCode);