简介:
一些前端应用例如:需要更新天气信息,更新帖子,更新信息等。
本文介绍通过服务和广播接收者来完成。定时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