我想使用时间调度每 15 分钟更新一次来自服务器的数据。有没有办法,让我们可以更新数据背景?
问问题
1066 次
1 回答
1
使用警报管理器将其设置为每 15 分钟发送一次广播以唤醒您的 intentservice 实例并从那里进行更新。
编辑:
为了您的方便,我添加了完整的启动方式,您可能希望在打开应用程序时启动警报。无论哪种方式,只需遵循警报管理器和意图服务所在的代码即可。
首先创建一个监听启动完成的广播接收器
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.example.CheckUpdateIntentService;
public class BootCompleteReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//Create pending intent to trigger when alarm goes off
Intent i = new Intent(context, CheckUpdateIntentService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
//Set an alarm to trigger the pending intent in intervals of 15 minutes
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
//Trigger the alarm starting 1 second from now
long triggerAtMillis = Calendar.getInstance().getTimeInMillis() + 1000;
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);
}
}
现在让意图服务进行实际更新
import android.content.Context;
import android.content.Intent;
import android.app.IntentService;
public class CheckUpdateIntentService extends IntentService {
public CheckUpdateIntentService()
{
super(CheckUpdateIntentService.class.getName());
}
@Override
protected void onHandleIntent(Intent intent)
{
//Actual update logic goes here
//Intent service itself is already a also a Context so you can get the context from this class itself
Context context = CheckUpdateIntentService.this;
//After updates are done the intent service will shutdown itself and wait for the next interval to run again
}
}
在您的 AndroidManifest.xml 中添加以下项目:
接收开机完成广播的权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
然后在应用程序标签中添加您创建的 BootCompleteReceiver 以及您感兴趣的相应意图过滤器,当然还有意图服务组件
<receiver android:name=".BootCompleteReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name=".CheckUpdateIntentService" ></service>
这是一个非常简单的实现,如果您需要更多帮助,可以先尝试一下,让我们知道。
于 2012-11-09T01:09:37.780 回答