Android开发-通过广播和服务开启定时刷新任务

简介:

一些前端应用例如:需要更新天气信息,更新帖子,更新信息等。

本文介绍通过服务和广播接收者来完成。定时3秒更新一次,但是由于手机性能的关系,更新可能会有几秒延迟。

 

步骤一:MainActivity.java开启服务

package com.huwan.broadcastwithservicedemo;

 

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

 

public class MainActivity extends Activity {

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   // 开启服务

                   Intent intent = new Intent(this, LongRunningService.class);

                   startService(intent);

         }

}

 

步骤二:LongRunningService.java服务代码

package com.huwan.broadcastwithservicedemo;

 

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) {

                   return null;

         }

 

         @Override

         public int onStartCommand(Intent intent, int flags, int startId) {

                   new Thread(new Runnable() {

                            @Override

                            public void run() {

                                     Log.e("LongRunningService", "executed at " + new Date().toString());

                            }

                   }).start();

                   AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);

                   //int anHour = 60 * 60 * 1000;

                   int anTime = 3 * 1000; // 3秒打一次日志

                   long triggerAtTime = SystemClock.elapsedRealtime() + anTime;

                   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.java服务接收者,接受到服务后重新请求服务

package com.huwan.broadcastwithservicedemo;

 

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);

         }

 

}

主界面开启一次服务,服务发送一个定时任务,广播接收者收到任务后,重新开启一次服务,相当于守护进程。

 

Demo样例下载:http://www.huwan.xin/Source/AppPackage/ZIP/Android/BroadcastWithServiceDemo.rar

参考阅读:Android开发-通过观察者设计模式刷新数据或者关闭界面

参考阅读:Android开发-静态广播(包含broadcast向activity中传值),动态广播(有序/无序)使用介绍

参考阅读:Android开发-Android退出多个activity进程/同时关闭多个界面/关闭上一个界面

上面几个文档可以解决通过定时刷新之后,界面如何进行更新。

更多内容请访问:www.huwan.xin

猜你喜欢

转载自www.cnblogs.com/huwan/p/12758263.html