本案例知识是:后台执行定时任务。

Alarm机制:

一、创建LongRunningService类

package com.example.servicebestpractice;

import java.util.Date;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.SystemClock; public class LongRunningService extends Service { @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
new Thread(new Runnable() { @Override
public void run() {
// 打印日志模拟耗时操作。
System.out.println("服务启动时间:" + new Date().toString()); }
}).start(); AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
int times = 1000 * 60;// 设置相隔多久启动一次广播,我设置为1分钟启动一次服务,去执行定时任务(虽然我写的是打印一条日志,看起来很无趣)
long triggerAtime = SystemClock.elapsedRealtime() + times;// 设置触发时间点
Intent i = new Intent(this, AlarmReceiver.class);// 服务启动广播的intent意图
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, i, 0);// 封装pendingIntent,启动广播接收者意图
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtime,
pendingIntent);// 设置精确定时时间,定时到了触发,广播启动。
return super.onStartCommand(intent, flags, startId);
} }

二、创建要接收上述要启动的广播。

package com.example.servicebestpractice;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent; public class AlarmReceiver extends BroadcastReceiver { @Override
public void onReceive(Context context, Intent intent) {
//服务类时间到启动广播这行这个方法
Intent intent2 = new Intent(context, LongRunningService.class);
context.startService(intent2);//启动广播做启动服务操作,服务又一次启动。
//由于服务不再前台,因此不需要设置addFlags();方法。因为服务不再借助任务栈去创建了。
} }

三、我们要有一个启动服务的入口,那就选择在主活动作为入口:

package com.example.servicebestpractice;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//主活动要首先有一次启动服务的操作
Intent intent3 = new Intent(this, LongRunningService.class);
startService(intent3);//启动服务
} }

四、广播、活动、服务三大组件记得去清单文件配置一下:

<activity
android:name="com.example.servicebestpractice.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> <service android:name="com.example.servicebestpractice.LongRunningService" >
</service> <receiver android:name="com.example.servicebestpractice.AlarmReceiver" >
</receiver>

写完这篇博客后,看了一下我的log后台输出如下截图:

每隔一分钟,定时任务完成,启动一次服务。

Android初级教程启动定时器详解的更多相关文章

  1. Android之Activity启动流程详解(基于api28)

    前言 Activity作为Android四大组件之一,他的启动绝对没有那么简单.这里涉及到了系统服务进程,启动过程细节很多,这里我只展示主体流程.activity的启动流程随着版本的更替,代码细节一直 ...

  2. Android 开机动画启动过程详解

    Android 开机会出现3个画面: 1. Linux 系统启动,出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片): 2. Android平台启动初始化,出 ...

  3. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  4. android学习-Activity启动过程详解

    注:只是说明启动activity的过程(ActivityThread如何与ActivityManagerService简称AmS进行进程间通信调用全过程),不解析android从zygote(受精卵) ...

  5. Android开发——Activity启动模式详解

    1. Activity的启动模式 本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52054893 1.1 Standard标 ...

  6. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  7. 【STM32H7教程】第13章 STM32H7启动过程详解

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教 ...

  8. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  9. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!

    Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...

随机推荐

  1. Excel实现双击插入当前日期时间

    用vba做一个事件驱动程序. 第一步:点击开发工具-visual basic. 第二步:在当前工作表中编制程序如下: Private Sub Worksheet_BeforeDoubleClick(B ...

  2. HL7工具安装步骤

    下载目录:http://gforge.hl7.org/gf/ 说明:在安装HL7V3学习工具之前,确保本机已安装IIS服务和Access数据库. 各种软件见附件. 1.下载安装步骤   RIM模型下载 ...

  3. A TensorBoard plugin for visualizing arbitrary tensors in a video as your network trains.Beholder是一个TensorBoard插件,用于在模型训练时查看视频帧。

    Beholder is a TensorBoard plugin for viewing frames of a video while your model trains. It comes wit ...

  4. ES6数组新增的几个方法

    关于数组中forEach() .map().filter().reduce().some().every()的总结 1.forEach() var arr = [1,2,3,4]; arr.forEa ...

  5. PTA 社交网络图中结点的“重要性”计算(30 分)

    7-12 社交网络图中结点的“重要性”计算(30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互 ...

  6. avalon加载一闪而过现象

      为了避免未经处理的原始模板内容在页面载入时在页面中一闪而过,我们可以使用以下样式(详见这里): .ms-controller,.ms-important,[ms-controller],[ms-i ...

  7. 对于DFT频谱泄漏问题的研究

    问题简介: 对于频率为fs的正弦序列,它的频谱应该只是在fs处有离散谱.但是,在实际利用DFT求它的频谱时,对时域做了截断,结果使信号的频谱不只是在fs处有离散谱,而是在以fs为中心的频带范围内都有谱 ...

  8. vue拦截器实现统一token,并兼容IE9验证

    项目中使用vue搭建前端页面,并通过axios请求后台api接口,完成数据交互.如果验证口令token写在在每次的接口中,也是个不小的体力活,而且也不灵活.这里分享使用vue自带拦截器,给每次请求的头 ...

  9. SSH搭建spring,使用依赖注入的方法

    配置文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.o ...

  10. LinkedList源码和并发问题分析

    1.LinkedList源码分析 LinkedList的是基于链表实现的java集合类,通过index插入到指定位置的时候使用LinkedList效率要比ArrayList高,以下源码分析是基于JDK ...