【Android】全局定时器Alarm

AlarmManager通常用于开发手机闹钟,但实际上他的作用不限于此。它的本质是一个全局定时器,AlarmMangager可在指定的时间或指定周期启动其他组件(包括Activity、Service、BroadcastReceiver)。

下面通过一个例子来演示AlarmManager启动BroadcastReceiver(发送广播)。

activity类:

package com.zzj.ui.alarmdemo;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.zzj.ui.R;

public class MainActivity extends Activity {
	private AlarmManager alarmManager;
	Intent intent;
	PendingIntent pi;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.alarm_activity);

		alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
		intent = new Intent(this, AlarmBroadcastReceiver.class);
		intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		intent.setAction("Action.Alarm");
		pi = PendingIntent.getBroadcast(this, 0, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);
	}

	public void excuse(View v) {
		switch (v.getId()) {
		case R.id.start_btn:
			// 只执行一次
			// alarmManager.set(AlarmManager.RTC_WAKEUP,
			// System.currentTimeMillis(), pi);
			// 每隔10秒执行一次
			alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
					System.currentTimeMillis(), 10 * 1000, pi);
			break;
		case R.id.stop_btn:
			// 取消闹钟
			alarmManager.cancel(pi);
			break;
		default:
			break;
		}
	}
}
activity布局文件就省掉了,很简单。

BroadcastReceiver类:

package com.zzj.ui.alarmdemo;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmBroadcastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		if ("Action.Alarm".equals(intent.getAction())) {
			System.out.println("闹钟事件发生了!");
			Toast.makeText(context, "闹钟事件发生了!", Toast.LENGTH_LONG).show();
		}
	}

}
点击【start】启动闹钟,每隔10秒会发送一次广播,点击【stop】可取消闹钟。

这里有一个问题,如果重复点击【start】(重复启动闹钟)会怎样?看下面的日志输出:

这是在某一次发送广播两秒之后再次启动了广播。根据输出结果,可以得到以下结论:

重复启动闹钟,会取消上一次设置的闹钟,再启动新的闹钟。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值