码迷,mamicode.com
首页 > 其他好文 > 详细

AlarmManager 用法

时间:2014-07-03 21:24:04      阅读:308      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   color   使用   

AlarmManager 可以按照”预先设定的时间“或”时间间隔"激活Intent的一种方式,他与timer不同的是,他是程序之外的,生命周期不受程序控制,即使程序关闭也会触发。它比Service和定时器更加节省资源。如果在应用程序内触发定时操作,推荐Handler,Timer以及Thread等方式。因为这样Android能更好的控制系统资源。

 

一.代码

bubuko.com,布布扣
public class MainActivity extends Activity {

    Button btn1,btn2;

    AlarmManager am;
    PendingIntent pi;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //创建AlarmManager
        am=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
        
        
        btn1=(Button)findViewById(R.id.btn1);    
        btn2=(Button)findViewById(R.id.btn2);
        
        btn1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                
                //启动照相机
                Intent intent = new Intent("android.media.action.STILL_IMAGE_CAMERA");
                pi= PendingIntent.getActivity(MainActivity.this,0,intent,0);
                                
                //十秒后激活Intent
                Calendar calendar=Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);
                
                //设置Alarm,第一个参数:Alarm类型,第二个参数触发时间,第三个参数PendingIntent
                am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
    
            }
        });
        
        btn2=(Button)findViewById(R.id.btn2);
        btn2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //取消AlarmManager任务
                am.cancel(pi);
            }
        });
    }
}
View Code

 

二.相关说明

1.Alarm有四个可用的类型(代码中的set方法中第一个参数)

(1)RTC_WAKEUP 在指定的时间唤醒设备,并激活PendingIntent

(2)RTC 在指定的时间激活PendingIntent,但是不会唤醒设备

(3) ELAPSED_REALTIME 根据设备启动之后经过的时间激活PendingIntent,但是不会唤醒设备,经过的时间包含设备休眠的所有时间

(4)ELAPSED_REALTIME_WAKEUP 在设备启动并经过指定的时间之后激活PendingIntent和唤醒设备。

2.设置重复的Alarm。

如果需要Alarm间隔一段时间激活Intent,可以是用setRepeating或setIndexactRepeating两个方法,这两个方法都支持Alarm类型。

(1)setRepeating方法可以对时间进行精确的控制,最多可以精确到毫秒。但是这样设备比较耗电

例:

bubuko.com,布布扣
// 创建AlarmManager
                AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                // 启动照相机
                Intent intent = new Intent(
                        "android.media.action.STILL_IMAGE_CAMERA");
                PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

                //每个十秒触发
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);
                
                am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10000, pi);
                // 取消AlarmManager任务
                //am.cancel(pi);
View Code

 

(2)setIndexactRepeating 相比setRepeating,setIndexactRepeating 可以减少电量的消耗。在使用setIndexactRepeating 时,Android会同步多个没有精确指定时间间隔的Alarm,然后同时触发她们。(一次触发多个,例如设置Alarm时间间隔为:INTERVAL_HOUR,Android会同步所有时间间隔为为INTERVAL_HOUR的Alarm,并且同时触发)

setIndexactRepeating 常用的时间间隔

INTERVAL_FIFTEEN_MINUTES(每十五分钟)

INTERVAL_HALF_HOUR(每隔半个小时)

INTERVAL_HOUR(每隔一个小时)

INTEVAL_HALF_DAY(每个半天)

INTEVAL_DAY(每隔一天)

 

例:

bubuko.com,布布扣
// 创建AlarmManager
                am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                // 启动照相机
                Intent intent = new Intent(
                        "android.media.action.STILL_IMAGE_CAMERA");
                pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

                //每个十五分钟触发
                am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                        AlarmManager.INTERVAL_FIFTEEN_MINUTES,
                        AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi);
View Code

 

 

AlarmManager 用法,布布扣,bubuko.com

AlarmManager 用法

标签:android   style   blog   http   color   使用   

原文地址:http://www.cnblogs.com/ywtk/p/3820999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!