android在应用程序运行时不时在后台运行服务

时间:2012-11-22 12:05:48

标签: android service cron alarmmanager schedule

我正在构建一个Android应用程序,当它运行时,如果用户连接到某个网络,我需要在每分钟拨打我的网络服务器。

我计划使用服务拨打电话,但我如何在每分钟拨打电话? 我想我需要使用alaarm管理器,但我在哪里进行初始化?在我的开始活动?我只需要在我的应用程序运行时执行该服务。

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

如果您只想在应用程序运行时调用服务器,则无需使用警报管理器。还有其他选项,如

CoundDownTimer

主题

在这种情况下,我更喜欢CoundownTimer,您可以像这样使用

CountDownTimer countDownTimer = new CountDownTimer(1000000, 60 * 1000) {

    @Override
    public void onTick(long millisUntilFinished) {
            // Do something on a tick.
    }

    @Override
    public void onFinish() {
        // Do something, maybe?

        this.start();
    }
};
countDownTimer.start();

答案 1 :(得分:1)

试试这个::

您可以在您想要的活动中调用此计时器

private Timer autoUpdate;
@Override
public void onResume() {
    super.onResume();
    autoUpdate = new Timer();
    autoUpdate.schedule(new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    //call your service from here
                }
            });
        }
    }, 0, 60000);//set time interval according to your requirement
}

随意询问您是否有任何疑问:)

答案 2 :(得分:0)

在活动中:

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   TestAlarmMessageReceiver almesr = new TestAlarmMessageReceiver(this, time);
}

广播接收器:

public class TestAlarmMessageReceiver extends BroadcastReceiver {


    public TestAlarmMessageReceiver() {
    }

    public TestAlarmMessageReceiver(Context context, int timeout) { //timeout in seconds
        AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, TestAlarmMessageReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 
                PendingIntent.FLAG_CANCEL_CURRENT);
        Calendar time = Calendar.getInstance();
        time.setTimeInMillis(System.currentTimeMillis());

        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 
                timeout*60*1000, pendingIntent);
    }

    @Override
    public void onReceive(Context arg0, Intent arg1) {
        arg0.startService(new Intent(arg0, TestMessageService.class));
    }

}

服务:

public class TestMessageService extends Service {

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

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        messageUpdateTask();
        return super.onStartCommand(intent, flags, startId);
    }

    private void messageUpdateTask(){
        GetMessagesUpdateAsyncTak getMessUpd = new GetMessagesUpdateAsyncTak();
        getMessUpd.execute(this);
    }
}

答案 3 :(得分:-1)

使用AsynTask http://developer.android.com/reference/android/os/AsyncTask.html

调用您的Web服务器

AsynTask 类的 onPost 方法中等待一分钟并调用AsynTask。

您可以使用以下代码调用AsynTask:

  BLSyncingProcedure objSyncingProcedure=new BLSyncingProcedure();
        objSyncingProcedure.execute(HomeScreen.this);

BLSyncingProcedure 是您的AsynTask类名。