Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 493|回复: 0

开发交流:Android中的Alarm

[复制链接]

该用户从未签到

发表于 2011-10-24 09:13:52 | 显示全部楼层 |阅读模式
android中的定时任务。由AlarmManager对象进行管理
1.定时唤醒广播接受者
直接贴代码,在代码中说明
AlarmController.java
Java代码

public class AlarmController extends Activity{

        private Toast mToast;

        private static final String TAG = "app";

        @Override

        protected 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() {         

                @Override

                public 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() {

                @Override

                public 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() {

                @Override

                public void onClick(View v) {        //取消alarm

                        AlarmManager 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
关键代码:
Java代码
//注意此方法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);
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 19:24 , Processed in 0.331768 second(s), 37 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表