在android中定期获取/更新和比较数据?
我正在创建一个android应用程序,它从天气api以及北极光上的twitter更新中获取本地天气预报,并将两者关联起来。我想知道,即使用户的设备上没有打开应用程序,对我来说,持续更新数据和比较数据的最佳方式是什么?所以本质上我希望我的应用程序在后台运行。任何帮助都会很好 您希望定期重复的任务可以在IntentService中实现在android中定期获取/更新和比较数据?,android,Android,我正在创建一个android应用程序,它从天气api以及北极光上的twitter更新中获取本地天气预报,并将两者关联起来。我想知道,即使用户的设备上没有打开应用程序,对我来说,持续更新数据和比较数据的最佳方式是什么?所以本质上我希望我的应用程序在后台运行。任何帮助都会很好 您希望定期重复的任务可以在IntentService中实现 public class MyService extends IntentService { public MyService () { s
public class MyService extends IntentService {
public MyService () {
super("MyService ");
}
@Override
protected void onHandleIntent(Intent intent) {
new MyTask().execute();
Log.d("MyService", "About to execute MyTask");
}
private class MyTask extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... strings) {
Log.d("MyService", "Calling doInBackground within MyTask");
return false;
}
}
}
悬挂式帐篷将被发送至广播接收器,以监听警报:
public class MyAlarmReceiver extends BroadcastReceiver {
public MyAlarmReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
Log.d("MyAlarmReceiver", "Called context.startService");
}
}
public class MyBootReceiver extends BroadcastReceiver {
public MyBootReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyBootReceiver ", "Boot completed");
int interval =10*1000;//every 10 second
AlarmManager alarm =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(),
interval, pendingIntent);
}
}
每次手机关机时,您设置的闹钟都会自动取消,因此您需要一个广播接收器来监听,以便再次设置闹钟:
public class MyAlarmReceiver extends BroadcastReceiver {
public MyAlarmReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
Log.d("MyAlarmReceiver", "Called context.startService");
}
}
public class MyBootReceiver extends BroadcastReceiver {
public MyBootReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyBootReceiver ", "Boot completed");
int interval =10*1000;//every 10 second
AlarmManager alarm =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis(),
interval, pendingIntent);
}
}
在AndroidManifest.xml中,您需要为BroadcastReceiver添加RECEIVE_BOOT_COMPLETED权限和BOOT_COMPLETED intent筛选器:
<application ...>
...
<receiver
android:name=".services.MyBootReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="500" >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
...
</application>
...
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
更多详细信息不要在设备中比较数据,请在服务器中进行比较。如果数据发生更改,则通过GCM或类似技术向设备发送更新。我同意@IllegalArgument。这种任务最好在服务器上完成。您不仅不必担心电池电量,在这种情况下,您还可以将所有注册应用程序中的信息结合起来,以获得更好的整体效果。