Android:每10分钟ping一次服务器

时间:2016-01-30 08:04:37

标签: android service garbage-collection broadcastreceiver alarmmanager

我需要每10分钟ping一次服务器(api调用),如果我的应用程序在后台运行,api调用应该正常。请建议我更好的选择。

现在我使用了Service,但如果我的应用程序处于后台(由于GC清除),它会在一段时间后完成。

如果应用程序在后台运行,如何避免GC清除。请帮帮我。

2 个答案:

答案 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
 }

 }