创建一个Android后台服务,该服务不断轮询REST API以获取数据
作者:互联网
我需要编写一个Android服务,轮询服务器以获取数据,解析数据,然后通过意图将其发送到应用程序.轮询必须经常进行(每隔几秒钟).根据我的阅读,不推荐这样的轮询(由于电池寿命问题).这是我第一次在Android上开发,经过大量的研究,有一些事情对我来说还不清楚.
我不确定服务,同步适配器或报警管理器是否更适合我的需求.在这个问题的背景下哪一个最有意义?
此服务需要在启动时启动并继续在后台运行.轮询服务器后,数据将通过意图发送到另一个应用程序.该服务应该完全没有用户交互.从我所看到的,似乎Android试图阻止人们因恶意软件问题而编写此类内容.有可能做到这一点吗?
解决方法:
首先,创建一个服务类,它将在给定的时间间隔后运行一个处理程序,
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>
剩下的事情取决于你!请先尝试自己,然后再回来寻求帮助!
标签:android,android-service,android-syncadapter 来源: https://codeday.me/bug/20190623/1267794.html