android 定时器_后台定时执行_定时刷新提醒实现Demo
2015-01-22 13:07:21  By: dwtedx

抢购现在非常流行、那么随着抢购而来的就是定时提醒功能、最近研究了一下定时提醒、发现只能通过AlarmManager这个api来实现、下面我就把实现的代码贴出来、以供以后使用

这个类提供了一种系统级的alarm服务、这个服务允许用户安排自己的应用程序在将来的某一个时间点运行、当设置的alarm响起、那么之前系统为这个alarm注册的Intent就会自动的运行目标应用程序(如果此时应用程序还没有运行)、即使在系统处于休眠状态时(如果在此期间alarm响起、那么就会唤醒设备)、系统注册的alarm依旧保持、但是当alarm被关闭或者是系统重启后、之前设置的alarm就会被清除、通常这个intent对应的是一个广播(BroadcastReceiver)

AlarmManager类的方法的参数最重要的就是PendingIntent、PendingIntent是Intent的一个增强版本、内部自己会调用startIntent()、所以我们在外面就不用再调用startIntent()、而Intent对应的广播就会自己执行、关于更多的api和方法请访问google的官方文档http://developer.android.com/reference/android/app/PendingIntent.html 、由于各种原因可能国内访问不了、你可以看看这个文章、如何翻墙访问国外网站http://dwtedx.com/forum_120.html


下面是MainActivity onCreate源代码

// 创建Intent对象,action指向广播接收类,附加信息为字符串“你该打酱油了”
Intent intent = new Intent("com.dwtedx.MyReceiver");
intent.putExtra("msg", "你该起床了");
// 创建PendingIntent对象封装Intent,由于是使用广播,注意使用getBroadcast方法
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// 获取AlarmManager对象
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

am.cancel(pi);  
// 设置闹钟从当前时间开始,每隔10分钟执行一次PendingIntent对象,注意第一个参数与第二个参数的关系
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 5 * 1000, pi);


广播MyReceiver源代码

@Override
public void onReceive(Context context, Intent intent) {
	// TODO Auto-generated method stub
	String msg = intent.getStringExtra("msg")   
		transferLongToDate("yyyy-MM-dd HH:mm:ss", 
			System.currentTimeMillis());
	Log.i("SendReceiver", msg);  
	Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}

private String transferLongToDate(String dateFormat,Long millSec){
	SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
	Date date= new Date(millSec);
	return sdf.format(date);
}


AndroidManifest.xm注册广播

<receiver
	android:name=".MyReceiver"
	android:enabled="true"
	android:exported="true"
	tools:ignore="ExportedReceiver"  >
	<intent-filter>
		<action android:name="com.dwtedx.MyReceiver" />
	</intent-filter>
</receiver>


在BroadcastReceiver里面、大家可以把自己想做的事件或想执行的代码放到onReceive()方法里就ok了、最后把我自己的研究AlarmManager的一个Demo源代码贴出来、希望对大家有帮助

源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1kTqqz9X 密码: uk1e

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+