我需要编写一个Android服务,轮询服务器以获取数据,解析数据,然后通过意图将其发送到应用程序。轮询必须经常进行(每隔几秒钟)。根据我的阅读,不推荐这样的轮询(由于电池寿命问题)。这是我第一次在Android上开发,经过大量的研究后,我还有一些不清楚的事情。
我不确定服务,同步适配器或警报管理器是否更适合我的需求。在这个问题的背景下哪一个最有意义?
此服务需要在启动时启动并继续在后台运行。轮询服务器后,数据将通过意图发送到另一个应用程序。该服务应该完全没有用户交互。从我所看到的,似乎Android试图阻止人们因恶意软件问题而编写此类内容。是否有可能实现这一目标?
答案 0 :(得分:3)
首先,创建一个服务类,它将在给定的时间间隔后运行处理程序,
public class SyncService extends Service {
private Handler mHandler;
// default interval for syncing data
public static final long DEFAULT_SYNC_INTERVAL = 30 * 1000;
// task to be run here
private Runnable runnableService = new Runnable() {
@Override
public void run() {
syncData();
// Repeat this runnable code block again every ... min
mHandler.postDelayed(runnableService, Constant.DEFAULT_SYNC_INTERVAL);
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Create the Handler object
mHandler = new Handler();
// Execute a runnable task as soon as possible
mHandler.post(runnableService);
return START_STICKY;
}
private synchronized void syncData() {
// call your rest service here
}
}
在 syncData()方法内部放置您的REST API调用,该调用将在30秒间隔后调用。
关于启动时的服务启动,使用广播接收器,一旦启动完成就会触发服务,例如,
<receiver android:name=".BootCompletedIntentReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
剩下的事情取决于你!请先尝试自己,然后再回来寻求帮助!
答案 1 :(得分:1)
您需要使用BroadcastReceiver
来使用BOOT_COMPLETED
过滤器检测启动事件。然后,您需要启动IntentService
来查询您的服务。
第1步:向您的清单添加权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
第2步:注册您的服务
<receiver android:name="com.myapp.BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
第3步:创建BootReceiver
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
// Start your intent service
...
}
}
}
第4步:开始并创建IntentService
...
Intent i = new Intent(context, BackgroundService.class);
context.startService(i);
...
第5步:一旦有效,请使用AlarmManager
安排IntentService
每隔x
时间运行一次。
如果您有更多问题,请与我们联系!