其他分享
首页 > 其他分享> > 创建一个Android后台服务,该服务不断轮询REST API以获取数据

创建一个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