服务的最佳实践——后台执行的定时任务

创建一个ServiceBestPractice项目,然后新增一个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;
import android.util.Log;

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() {
                Log.d("LongRunningService", "executed at " + new Date().toString());
            }
        }).start();
        AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
        int anHour = 60 * 60 * 1000;  //这是一小时的毫秒数
        long triggerAtTime = SystemClock.elapsedRealtime() + anHour;
        Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
        manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
        return super.onStartCommand(intent, flags, startId);
    }

}

新建一个AlarmReceiver类,并让它继承自BroadcastReceiver,代码如下所示:

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 i = new Intent(context, LongRunningService.class);
        context.startService(i);
    }

}

接下来我们需要在打开程序的时候启动一次LongRunningService,修改mainActivity中的代码,如下所示:

package com.example.servicebestpractice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent i = new Intent(this, LongRunningService.class);
        startService(i);
    }

}

最后别忘了,我们用到的广播接收器和服务都要在AndroidManifest.xml中注册才行,代码如下所示:

        <service android:name=".LongRunningService">
        </service>
        <receiver android:name=".AlarmReceiver">
        </receiver>
时间: 2024-10-13 14:09:34

服务的最佳实践——后台执行的定时任务的相关文章

设计为服务的最佳实践(转)

你是否曾想过,什么是微服务?以及大规模的互联网行业,例如社交,电商,物流,金融等领域,如何使用微服务构建互联网应用以满足用户需求. 要了解微服务是什么,你必须了解如何将单体应用程序,拆解为独立打包和部署的微型应用程序.本文章将帮助你清晰化的理解,开发者如何根据需求使用微服务来构建他们的应用程序. 下面,从以下几个维度进行阐述 为何选择微服务? 什么是微服务? 微服务架构的功能 微服务架构的优点 设计微服务的最佳实践 1,为何选择微服务? 现在,在我介绍微服务之前,让我们看看在微服务之前流行的架构

从Uber微服务看最佳实践如何炼成?

导读:Uber成长非常迅速,工程师团队快速扩充,据说Uber有2000名工程师,8000个代码仓库,部署了1000多个微服务.微服务架构是Uber应对技术团队快速增长,功能快速上线很出色的解决方案.本文偏向微服务的入门篇,以Uber微服务为例,进行了深入浅出的讲解. 微服务特性 对于微服务没有适当的定义,你可以说它是一个框架,由小型的.独立的可部署的服务组成,执行不同的操作. 微服务专注于单个业务领域,可以作为完全独立的可部署服务,并在不同的技术栈上实现它们. 单体架构和微服务架构区别 在使用微

保护REST API/Web服务的最佳实践

在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践? 在构建SOAP API时,您可以使用WS-Security作为指导,有关该主题的文献很多.我发现了有关保护REST端点的更少信息. 尽管我了解REST故意没有类似于WS- *的规范,但我希望最佳实践或推荐模式已经出现. 任何有关文件的讨论或链接将非常感激. 如果它很重要,我们将使用WCF和POX/JSON序列化消息来构建使用.NET Framework v3.5构建的REST API/Services.

基于AWS的云服务架构最佳实践

ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施.在今天的"信息时代",这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及快速响应时间的需求.本文将强调并重申其中的一些传统观念,并讨论他们如何在融合云计算的发展,还将讨论由于云计算的动态性而产生的一些前所未有的概念(如弹性). 本文的目标是面向云

android: 后台执行的定时任务

Android 中的定时任务一般有两种实现方式,一种是使用 Java API 里提供的 Timer 类, 一种是使用 Android 的 Alarm 机制.这两种方式在多数情况下都能实现类似的效果,但 Timer 有一个明显的短板,它并不太适用于那些需要长期在后台运行的定时任务.我们都知道,为 了能让电池更加耐用,每种手机都会有自己的休眠策略,Android 手机就会在长时间不操作 的情况下自动让 CPU 进入到睡眠状态,这就有可能导致 Timer 中的定时任务无法正常运行. 而 Alarm 机

服务的最佳实践--完整版的下载示例

这里主要是<Android第一行代码>第二版书中10.6碰到的问题和解决方法,记录下来希望能帮到大家,也希望大家有更好的解决方案能一起交流.. Android Studio版本如下: 这里我先列出按照书上代码运行会出现的错误: (1).java.net.UnknownServiceException: CLEARTEXT communication to raw.githubusercontent.com not permitted by network security policy (2)

后台执行的定时任务

package com.pingyijinren.test; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extend

(转)微服务框架落地实践之路

http://www.primeton.com/read.php?id=2276&his=1 一.微服务架构产生的背景 近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间.任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型.在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化的需求,面对业务模式的升级,如何构建出灵活的,可扩展,可重用的系统? 前几

分布式服务框架下,如何做到服务化最佳实践?

“升级服务框架后,性能.可靠性等问题日益明显.服务化之后面临的诸多挑战,怎样分析才能给出实践最优解? 在服务化之前,业务通常都是本地API调用,本地方法调用性能损耗较小.服务化之后,服务提供者和消费者之间采用远程网络通信,增加了额外的性能损耗,业务调用的时延将增大,同时由于网络闪断等原因,分布式调用失败的风险也增大.如果服务框架没有足够的容错能力,业务失败率将会大幅提升. 除了性能.可靠性等问题,跨节点的事务一致性问题.分布式调用带来的故障定界困难.海量微服务运维成本增加等也是分布式服务框架必须