Android : AlarmManager
来源:互联网 发布:js修改font的值 编辑:程序博客网 时间:2024/06/06 17:26
Android应用中使用Alarm事件,其功能和Java.util.Timer ,TimerTask类似。但Alarm可以即使当前应用退出后也可以做到Schedule一个任务在指定的时刻执行。
AlarmManager 用于管理Alarm事件,支持单次执行或重复执行。 和大都数Android服务一样,AlarmManager也是通过getSystemService来获取服务对象:
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
与TimerTask对应的任务描述类型为PendingIntent,PendingIntent描述了将要执行的Intent,PendingIntent没有提供构造函数,需要通过static 函数getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Intent, int) 来或得想要执行的Activity,Broadcast,Service描述。
定时启动 Activity
Intent intent = new Intent(this, MainActivity.class);intent.setAction(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);// 定时启动窗口(10s后开始,每隔10s启动一次)alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 10000, 10000, pendingIntent);
若需要窗体正在运行时不启动,运行在后台时自动启动,在 AndroidManifest.xml 的 Activity 属性中添加 android:launchMode="singleTask"
即可。
<activity android:name=".MainActivity" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
定时执行Broadcast事件
OneShotAlarm.java
public class OneShotAlarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "OneShotAlarm", Toast.LENGTH_SHORT).show(); }}
RepeatingAlarm.java
public class RepeatingAlarm extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "RepeatingAlarm", Toast.LENGTH_SHORT).show(); }}
AndroidManifest.xml
<receiver android:name=".OneShotAlarm"/><receiver android:name=".RepeatingAlarm"/>
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnOneShotAlarm = (Button) findViewById(R.id.btn_one_shot_alarm); Button btnStartRepeatingAlarm = (Button) findViewById(R.id.btn_start_repeating_alarm); Button btnStopRepeatingAlarm = (Button) findViewById(R.id.btn_stop_repeating_alarm); // 单次执行,向OneShotAlarm发出一个Broadcast Intent btnOneShotAlarm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, OneShotAlarm.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 3); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); } }); // 重复执行,每5秒向RepeatingAlarm发送一个Broadcast事件 btnStartRepeatingAlarm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, RepeatingAlarm.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); long firstTime = SystemClock.elapsedRealtime(); firstTime += 5 * 1000; AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, pendingIntent); } }); // 取消重复执行 btnStopRepeatingAlarm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, RepeatingAlarm.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); } }); }}
参考:
https://developer.android.com/samples/RepeatingAlarm/index.html
http://blog.csdn.net/mapdigit/article/details/7644134
- Android AlarmManager
- Android---AlarmManager
- Android AlarmManager
- android AlarmManager
- Android AlarmManager
- Android : AlarmManager
- Android AlarmManager
- Android-AlarmManager
- Android AlarmManager
- android全局定时器AlarmManager
- Android AlarmManager 应用
- android之定时器AlarmManager
- android之定时器AlarmManager
- android之定时器AlarmManager .
- Android之AlarmManager
- Android之AlarmManager
- android之alarmManager
- Android AlarmManager简单例子
- 浏览器缓存机制
- List去掉重复对象
- Eclipse tomcat 配置问题
- Android 自定义控件学习之一 基础知识
- 基因数据处理48之ART使用实例
- Android : AlarmManager
- object-c中#import #include @class的区别
- Android APP 禁用横竖屏切换
- iOS_如何画1px的线
- 嵌入式Linux基础知识0(什么是真正的实时操作系统--硬实时 软实时)
- linux系统c++线程池的实现
- 用异步获取网络数据Json
- 自定义类封装数组,并对数组进行CRUD操作;有序数组的实习与查找
- 深入浅出学Hive——Hive内建操作符与函数开发