Android用AlarmManager实现后台任务-android学习之旅(63)
16lz
2021-01-23
因为Timer不能唤醒cpu,所以会在省电的原因下失效,所以需要唤醒cpu在后台稳定化的执行任务,AlarmManager能够唤醒cpu
这个例子讲解了如何通过Service来在后他每一个小时执行.特定的任务,原理是在Service里面设置一个一小时定时,然后到了一个小时以后启动BroadCast,然后在onReceive方法中再次启动Service,这样每一个小时就启动一次Service,行程循环
代码如下
activity
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this,LongRunningService.class); startService(intent); }
service
public class LongRunningService extends Service { public LongRunningService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread(new Runnable() { @Override public void run() { Log.d("LongRunningService", "excuted" + new Date().toString()); } }).start(); AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); int anHour = 60*60*1000; long trigerAtTime = SystemClock.elapsedRealtime()+anHour; Intent alarmIntent = new Intent(this,AlarmReceive.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,alarmIntent,0); manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,trigerAtTime,pendingIntent); return super.onStartCommand(intent, flags, startId); }}
receiver
public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. Intent i = new Intent(context,LongRunningService.class); context.startService(i); }}
更多相关文章
- Android使用Bmob后台服务器的基础配置与操作(一)
- Android 播放器硬解前后台切换黑屏问题
- Android 轻松实现后台搭建+APP版本更新
- Android中如何实现后台执行定时任务
- Android开发学习笔记-关于Android的消息推送以及前后台切换
- android 前后台运行判断(使用场景如:在app聊天中,如果前端运行不发
- Android 利用AudioManager控制后台音乐播放器暂停,播放