欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

android 定时器_后台定时执行_定时刷新提醒实现Demo

程序员文章站 2022-03-01 14:37:50
...

抢购现在非常流行、那么随着抢购而来的就是定时提醒功能、最近研究了一下定时提醒、发现只能通过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