Android初级教程启动定时器详解

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

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后台输出如下截图:

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

时间: 2024-11-09 12:45:33

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

Android activity四大启动模式详解

Activity中四大启动模式 在AndroidManifest.xml中 ,有一个默认的activity  在它里面可以设置activity启动模式,  android:launchMode=""  ,该属性用于配置Activity的加载模式,该属性支持4中属性  每不同的模式出现不同的效果,下面详解启动模式. standard:标准模式,默认加载模式 singleTop:Task顶单例模式 singleTask:Task内单例模式 singleInstance:全局单单例模式 1

Android Phone进程启动过程详解

之前解决一个开机搜网慢的问题时,发现由于Phone进程起来以后才会主动连接RILD,因而在一定程度上Phone进程启动的时间会影响网络状态注册的快慢.适当的将Phone进程提前,可以将网络注册时间提前一点,让状态栏中信号显示的时间提前.那么,Android中作为系统的核心进程之一,Phone进程是如何启动的了? RIL运行机制请参考: http://blog.csdn.net/jason_wzn/article/details/53232022 Telephony最开始创建的是PhoneFact

Android中Activity启动模式详解,可以控制程序按home键后进来还会调用一个自己不喜欢的界面

其实这是很简单的一个问题.但是这还是要对android中activity的启动模式有相当的理解才行,当点击home键的时候,懂Android的人都知道,他会把当前activity放到后退栈中, 栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算.人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底.向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称为出栈或退栈,它是把栈

Android中Activity启动模式详解

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四种启动模式:

android 4中启动模式详解

注:实例=Activity 1.standard(默认模式) 在同一个Task中创建不同的实例 2.singleTop(默认模式) 在同一个Task中,如果当前实例在Task的顶部,不会创建一个新的实例,否则创建() 3.singleTask(默认模式) 在同一个Task中,不会有相同的实例,只可以创建不相同的实例(多个兔子一个笼) 4.singleInstance(默认模式) 每个实例都在一个单独的Task中(一个兔子一个笼)

第14章 启动文件详解—零死角玩转STM32-F429系列

第14章     启动文件详解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料<STM32F4xx 中文参考手册>第十章-中断和事件:表 46. STM32F42xxx 和 STM32F43xxx 的向量表:MDK中的帮助手册—ARM Development Tools:用来查询ARM的汇编指令和编译器相关的指令. 14.1 启动文件简介 启动文件由汇编编写,是

Android Service demo例子使用详解

Android Service demo例子使用详解\ 概述Service 是 Android 的四大组件之一,它主要的作用是后台执行操作,Activity 属于带有 UI 界面跟用户进行交互,而 Service 则没有 UI 界面,所有的操作都是基于后台运行完成.并且 Service 跟 Activity 一样也是可以由其它的应用程序调用启动的,而且就算用户切换了应用程序,Service 依旧保持运行.一个组件如果与 Service 进行了绑定( bind ),就可以跟 Service 进行数

Android开发四大组件--Activity详解

Android开发四大组件--Activity详解 - Android开发教程 Android开发的四大组件在开发中应用中是必不可少的,下面就来详解下四大组件之一Activity,总结自网络.Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启动时: 第一个Activity onPause()——>第二个Activity onCreate()——>

第14章 启动文件详解

第14章     启动文件详解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料<STM32F4xx 中文参考手册>第十章-中断和事件:表 46. STM32F42xxx 和 STM32F43xxx 的向量表:MDK中的帮助手册-ARM Development Tools:用来查询ARM的汇编指令和编译器相关的指令. 14.1 启动文件简介 启动文件由汇编编写,是