我需要每10分钟ping一次服务器(api调用),如果我的应用程序在后台运行,api调用应该正常。请建议我更好的选择。
现在我使用了Service,但如果我的应用程序处于后台(由于GC清除),它会在一段时间后完成。
如果应用程序在后台运行,如何避免GC清除。请帮帮我。
答案 0 :(得分:0)
如果要在被杀后自动重启服务,请将服务设置为粘性。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
答案 1 :(得分:0)
您可以使用Handler。 Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象。每个Handler实例都与一个线程和该线程的消息队列相关联。 Handler有两个主要用途:(1)安排消息和runnables作为未来某些点执行; (2)将要在不同于自己的线程上执行的动作排入队列。
示例:
import com.example.martin.myapplication.app.R; // or ...myapplication.R
您还可以使用AlarmManager并从您的活动中设置重复闹钟,该闹钟将每10分钟调用一次接收器:
private final static int TIMEINTERVAL = 600000; //10 minutes
Handler mHandler;
Runnable mHandlerTask = new Runnable()
{
@Override
public void run() {
// call your api here.
ApiCall();
mHandler.postDelayed(mHandlerTask, TIMEINTERVAL);
}
};
private void startTask(){
//run your Task
mHandlerTask.run();
}
private void stopTask()
{
// stop your Task
mHandler.removeCallbacks(mHandlerTask);
}
<强>广播接收器:强>
AlarmManager alarmManager=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),600000,
pendingIntent);
您在Manifest.xml中注册的Receiver
public class Receiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//Call your API
}
}