Run volley request every 5 minutes in background android
Asked Answered
L

2

5

I use Volley library to connect with server in my app. Now, I have to send request in background every 5 minutes also when app is not running (killed by user). How should I do it? With background services, AlarmManager (Google says that it isn't good choice for network operations) or something else?

Or maybe SyncAdapter will be good for it?

Levitical answered 27/8, 2015 at 20:59 Comment(0)
N
7

You can use a TimerTask with scheduleAtFixedRate in a service class to achieve this, here is an example of Service class, you can use it

public class ScheduledService extends Service 
{

private Timer timer = new Timer();


@Override
public IBinder onBind(Intent intent) 
{
    return null;
}

@Override
public void onCreate() 
{
    super.onCreate();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            sendRequestToServer();   //Your code here
        }
    }, 0, 5*60*1000);//5 Minutes
}

@Override
public void onDestroy() 
{
    super.onDestroy();
}

}

You can use sendRequestToServer method to connect with the server. Here is the manifest declaration of the Service.

<service android:name=".ScheduledService" android:icon="@drawable/icon" android:label="@string/app_name" android:enabled="true"/>

To start the service from MainActivity,

// use this to start and trigger a service
Intent i= new Intent(context, ScheduledService.class);
context.startService(i);
Neurology answered 27/8, 2015 at 21:31 Comment(1)
and of course it will stop working as soon as device will go sleepLacrimatory
P
3

I prefer to use Android Handler because it is executes in UI Thread by default.

import android.os.Handler;

// Create the Handler object (on the main thread by default)
Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnableCode = new Runnable() {
    @Override
    public void run() {

       sendVolleyRequestToServer(); // Volley Request 

      // Repeat this the same runnable code block again another 2 seconds
      handler.postDelayed(runnableCode, 2000);
    }
};
// Start the initial runnable task by posting through the handler
handler.post(runnableCode);
Promycelium answered 25/8, 2016 at 9:21 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.