There are two kinds of timers commonly used on Android, one is Java.util.Timer, the other is the alarmservice of the system.
Experiment 1: Use Java.util.Timer.
Create a timer at OnStart (), update the counter every 5 seconds, and start.
|
mTimer.schedule( new TimerTask() { |
|
mHandler.sendEmptyMessage( 0 ); |
When connected to the USB cable for debugging, it will find that everything is working properly, update the interface every 5 seconds, even if the power button is pressed, will still be triggered 5 seconds.
When the USB cable is unplugged, press the Power key to turn off the screen, after a period of time to open again, found that the timer obviously did not continue to count, stuck in the power button off the number.
Lab 2: Using Alarmservice:
2.1 A broadcast is sent by Alarmservice each 5 seconds, and the setrepeating type is alarmmanager.elapsed_realtime.
|
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); |
|
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5 * 1000 , sender); |
Unplug the USB cable, press the power button, open the screen again after a while, and notice that the timer does not continue to count.
2.2setRepeating Yes type set to Alarmmanager.elapsed_realtime_wakeup
|
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); |
|
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5 * 1000 , sender); |
Unplug the USB cable, press the power button, turn on the screen a little longer, and find that the timer is counting.
In this case, the use of wakeup to ensure that the timer you want to work, but it will certainly cause increased power consumption
The use mechanism of Alarmmanager is called the global timer, and some call it an alarm clock. Through the use of it, the personal feel called the global timer is more appropriate, in fact, its role and timer a bit similar. There are two similar usages: (1) Perform an action after a specified length of time (2) perform an operation periodically
Alarmmanager objects are used in conjunction with intent, you can start an activity on a timed basis, send a broadcast, or open a service.
The following code describes the use of two timing methods in detail:
(1) Perform an action after a specified length of time
Java code
- //action: Send a broadcast, broadcast after receiving, toast prompt timed operation completed
- <!--
- Code highlighting produced by Actipro Codehighlighter (freeware)
- http://www.codehighlighter.com/
- --Intent Intent =new Intent (Main. This, alarmreceiver. class);
- Intent.setaction ("short");
- Pendingintent sender=
- Pendingintent.getbroadcast (Main. This, 0, intent, 0);
- //Set a time after five seconds
- Calendar calendar=calendar.getinstance ();
- Calendar.settimeinmillis (System.currenttimemillis ());
- Calendar.add (Calendar.second, 5);
- Alarmmanager alarm= (Alarmmanager) Getsystemservice (Alarm_service);
- Alarm.set (Alarmmanager.rtc_wakeup, Calendar.gettimeinmillis (), sender);
- //or simplified in the following way
- //alarm.set (Alarmmanager.rtc_wakeup, System.currenttimemillis () +5*1000, sender);
- Toast.maketext (Main. This, "alarm open after five seconds", Toast.length_long). Show ();
Note: Receiver remembers registering in Manifest.xml
Java code
- <!--
- Code highlighting produced by Actipro Codehighlighter (freeware)
- http://www.codehighlighter.com/
- - public static class Alarmreceiver extends broadcastreceiver{
- @Override
- public void OnReceive (context context, Intent Intent) {
- //TODO auto-generated method stub
- if (intent.getaction (). Equals ("short")) {
- Toast.maketext (Context, "short alarm", Toast.length_long). Show ();
- }else{
- Toast.maketext (context, "repeating alarm",
- Toast.length_long). Show ();
- }
- }
- }
(2) Periodic execution of an operation
Java code
- <!--
- Code highlighting produced by Actipro Codehighlighter (freeware)
- http://www.codehighlighter.com/
- --Intent Intent =new Intent (Main. This, alarmreceiver. class);
- Intent.setaction ("repeating");
- Pendingintent sender=pendingintent
- . Getbroadcast (Main. This, 0, intent, 0);
- //Start time
- long Firstime=systemclock.elapsedrealtime ();
- Alarmmanager am= (Alarmmanager) Getsystemservice (Alarm_service);
- 5 seconds, one cycle, no stop sending broadcasts.
- Am.setrepeating (alarmmanager.elapsed_realtime_wakeup
- , Firstime, 5*,sender);
Alarmmanager's setrepeating () is equivalent to a timer's schedule (task,delay,peroid); a bit of a difference where the timer this method is to specify how long to delay
Start the periodic execution task later;
Alarmmanager Cancellation: (It is important to note that the canceled intent must be in absolute agreement with the startup intent to support the cancellation Alarmmanager)
Java code
- <!--
- Code highlighting produced by Actipro Codehighlighter (freeware)
- http://www.codehighlighter.com/
- --Intent Intent =new Intent (Main. This, alarmreceiver. class);
- Intent.setaction ("repeating");
- Pendingintent sender=pendingintent
- . Getbroadcast (Main. This, 0, intent, 0);
- Alarmmanager alarm= (Alarmmanager) Getsystemservice (Alarm_service);
- Alarm.cancel (sender);
Implementation of the Android timer