加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

Android中使用AlarmManager需谨慎设置进程属性

发布时间:2021-11-22 12:11:01 所属栏目:教程 来源:互联网
导读:在Android中,AlarmManager提供了不受休眠状态的系统定时功能,其一般使用方法如下。 1、创建一个BroadcastReceiver类的子类,接收定时器事件: public class MyReceiver extends BroadcastReceiver { ...... } 2、在AndroidMenifest.xml中定义上述广播事件接
在Android中,AlarmManager提供了不受休眠状态的系统定时功能,其一般使用方法如下。
 
1、创建一个BroadcastReceiver类的子类,接收定时器事件:
 
public class MyReceiver extends BroadcastReceiver {
 
......
 
}
2、在AndroidMenifest.xml中定义上述广播事件接收类的定义:
 
<receiver android:name=".MyReceiver">
</receiver>
3、在程序中在需要时设置定时器:
 
Intent intent = new Intent(context,MyReceiver.class);   
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);   
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP , SystemClock.elapsedRealtime() + ms, pendingIntent);
经过ms毫秒之后,MyReceiver会被调用,从而实现定时触发。
 
但是,上述实现存在一个问题:如果设置定时器的进程被杀死之后,定时器事件就不会触发。而在Android中,系统在需要时会自动终止后台进程,因此在定时过程中,进程被杀死的可能性是非常之大的,特别是在一些内存较少的设备中,基本上后台进程所设置的定时器很难被触发。
 
为了让定时器在进程被终止后还能触发,需要对上述实现做一个小的修改:在AndroidMefest.xml中如下定义广播接收类:
 
<receiver android:name=".MyReceiver" android:process=":newinst">
</receiver> 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读