《第一行代码-Android》学习笔记(二十)
来源:互联网 发布:安卓刷机软件哪个最好 编辑:程序博客网 时间:2024/04/30 23:22
服务的最佳实践:
1.Android定时任务的两种实现方式:
a) Timmer:当手机进入休眠状态的时候,会导致Timmer定时任务无法正常执行。
b) Alarm:具有唤醒CPU的功能,能够保证每次进入定时任务的时候,CPU都能正常的工作。(唤醒CPU和唤醒屏幕是两个不同的概念)
2.如何使用Alarm机制:
a) 获取AlarmManager类的实例:
AlarmManager manager=(AlarmManager)getSystemService(Context.ALARM_SERVICE);
b) 调用set()方法:
i. 第一个参数:指定AlarmManager的工作类型:
1. ELAPSED_REALTIME:定时任务触发时间从系统开机开始算起,但不唤醒CPU;
2. ELAPSED_REALTIME_WAKEUP:定时任务触发时间从系统开机开始算起,并唤醒CPU
3. RTC:定时任务的触发时间从1970年1月1日0点开始算起,但不唤醒CPU;
4. RTC_WAKEUP:定时任务的触发时间从1970年1月1日0点开始算起,并唤醒CPU;
SystemClock.elapsedRealtime()方法可以获取到系统开机至今所经历时间的毫秒数;
SystemClock.currentTimeMillis()方法可以获取到从1970年1月1日0点至今的毫秒数;
ii. 第二个参数:就是定时任务触发的时间,以毫秒为单位
iii. 第三个参数:PendingIntent,可以通过其类方法getBroadcast()方法获取一个能够执行广播的PendingIntent,这样当定时任务执行的时候,广播接收器的onReceiver()方法就可以得到执行。
3.实现长期后台定时服务,只要在pendingintnet获取到的广播接收器中,继续打开这个服务,那么就可以定时一直走下去了。
4.代码实例:
long time = SystemClock.elapsedRealtime() + 10 * 1000;
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//这个intent用来后面发起广播在·
Intent i = new Intent(this, AlarmReceiver.class);
//getBroadcast——通过该函数获得的PendingIntent将会扮演一个广播的功能,就像调用 Context.sendBroadcast()函数一样
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, pendingIntent);
public class AlarmReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//继续启动服务,实现无限定时任务
Intent i = new Intent(context, AlarmService.class);
context.startService(i);
}
}
5.Alarm优化4.4版本之后,出于性能的考虑,系统会自动检测目前有多少Alarm任务存在,然后将几个任务触发时间相近的放在一起执行,降低CPU唤醒的次数。
如果想要和之前一样准确无误,可以调用新方法:setExact()代替set方法。
- 《第一行代码-Android》学习笔记(二十)
- 《第一行代码-Android》学习笔记(十)
- 第一行代码Android学习(十)
- 《第一行代码-Android》学习笔记(二)
- 《第一行代码-Android》学习笔记(二十二)
- 《第一行代码-Android》学习笔记(二十三)
- 《第一行代码-Android》学习笔记(二十四)
- 《第一行代码-Android》学习笔记(二十五)
- 第一行代码Android学习(二)
- Android第一行代码学习笔记二----活动
- Android 第一行代码(第二版)学习笔记(二)
- 《第一行代码-Android》学习笔记(二十一)WebView控件总结【修改】
- 《第一行代码》学习笔记--Android入门(一、二、三)
- Android第一行代码学习笔记总结
- 《Android第一行代码》学习笔记
- 《Android第一行代码》学习笔记
- FrameLayout《第一行代码Android》学习笔记
- Android第一行代码学习笔记
- 移动互联网应用技术架构简介-Android
- 2014年终总结
- 04.sprite_kit前瞻之纹理
- [BZOJ 1912][APIO 2010]patrol 巡逻(树的直径)
- js原型proto实例
- 《第一行代码-Android》学习笔记(二十)
- 【BZOJ 1049】 [HAOI2006]数字序列
- Python性能鸡汤,非常有效的提高性能的tips
- python中timeit模块用法
- 获取元素节点(DOM基础 )
- 昨天在微信里看到的一篇文章,应该不算是个新闻,但是还是值得仔细读一下。特别是对于那些在一个公司干了很多年却没有发展,或者每年跳槽两三次的同学确实应该反思看一看。原文地址 以下是正文 我曾经带过一个
- 20150225学习笔记
- adb命令、adb shell与Linux各种命令
- Canvas实战---模仿GOOGLE浮动小球效果