Android中的Alarm
16lz
2021-01-23
android中的定时任务。由AlarmManager对象进行管理
1.定时唤醒广播接受者
直接贴代码,在代码中说明
AlarmController.java
然后可以定期执行OneShotAlarm和RepeatingAlarm中的onRecevier中的内容
2.1.定时创建service
关键代码:
完整例子:
1.定时唤醒广播接受者
直接贴代码,在代码中说明
AlarmController.java
public class AlarmController extends Activity{private Toast mToast;private static final String TAG = "app";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.alarm_controller);Button button = (Button)findViewById(R.id.one_shot);button.setOnClickListener(oneShotListener);button = (Button)findViewById(R.id.start_repeating);button.setOnClickListener(startRepeatingListener);button = (Button)findViewById(R.id.stop_repeating);button.setOnClickListener(stopRepeatingListener);}private OnClickListener oneShotListener = new OnClickListener() {@Overridepublic void onClick(View v) {//只进行一次定时,不重复执行AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);Calendar calendar = Calendar.getInstance();calendar.setTimeInMillis(System.currentTimeMillis());calendar.add(Calendar.SECOND, 30);//设置30秒后执行/* * 根据PendingIntent.getBroadcast * 指明定时唤醒广播接收者 * */PendingIntent pending = PendingIntent.getBroadcast(AlarmController.this, 0, new Intent(AlarmController.this,OneShotAlarm.class), 0);am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending); //表示在指定时间后执行if(mToast!=null){mToast.cancel();}mToast.makeText(AlarmController.this, "one_shot_scheduled", Toast.LENGTH_LONG).show();}};private OnClickListener startRepeatingListener = new OnClickListener() {@Overridepublic void onClick(View v) {//重复执行AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);PendingIntent pend = PendingIntent.getBroadcast(AlarmController.this, 0, new Intent(AlarmController.this,RepeatingAlarm.class), 0);long triggerAtTime = SystemClock.elapsedRealtime();triggerAtTime +=15*1000;//表示第一次执行15秒后am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, 15*1000, pend);//表示过15秒重复唤醒广播接受者if(mToast!=null){mToast.cancel();}mToast.makeText(AlarmController.this, "repeating_scheduled", Toast.LENGTH_LONG).show();}};private OnClickListener stopRepeatingListener = new OnClickListener() {@Overridepublic void onClick(View v) {//取消alarmAlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);PendingIntent pend = PendingIntent.getBroadcast(AlarmController.this, 0, new Intent(AlarmController.this,RepeatingAlarm.class), 0);am.cancel(pend);if(mToast!=null){mToast.cancel();}mToast.makeText(AlarmController.this, "stop_repeating_scheduled", Toast.LENGTH_LONG).show();}};}
然后可以定期执行OneShotAlarm和RepeatingAlarm中的onRecevier中的内容
2.1.定时创建service
关键代码:
//注意此方法PendingIntent.getService()PendingIntent pend = PendingIntent.getService(this, 0, new Intent(this,AlarmService_Service.class), 0);AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);long firstTime = SystemClock.elapsedRealtime();am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 15*1000, pend);
完整例子:
更多相关文章
- material design 的android开源代码整理
- Android Studio代码混淆,开启Proguard,稍微总结一下
- android查询软件(身份证号,号码归属等)源代码
- android Java代码的启动
- Android 代码设置来电铃声
- android 执行shell命令代码
- android 开发中常用颜色,以及一些颜色的代码
- Android Camera子系统之源代码View