Android中的发送超时重试模式

时间:2014-02-19 08:40:54

标签: android timeout send

我想创建一个应该将一些JSON数据发送到远程服务器的小应用程序。

我需要注意的情况,例如当用户没有互联网或只是无法发送数据时,手机将重试,直到数据从手机发送并由服务器接收为止。

有这样的模式吗?一般模式还是Android特定的?

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

我正在使用超时时间戳来知道是否未发送消息(在这种情况下是用于串行通信):

private TimerTask WriterTask = new TimerTask() {
    @Override
    public void run() {
        wasStarted = true;
        synchronized (MessageQueue) {
            if (mSIOManager != null && mSIOManager.getmWriteBufferSize() == 0
                    && MessageQueue.size() > 0) {
                QueueEntry item = MessageQueue.peek();
                if (item != null && !item.sent) {
                    timeoutTimer = System.currentTimeMillis();
                    mSIOManager.writeAsync(item.Msg.getBytes());
                    Log.v(TAG, HexDump.dumpHexString(item.Msg.getBytes())
                            + " - Written to Buffer");
                    item.sent = true;
                }
            }
            try {
                if (System.currentTimeMillis() - timeoutTimer > TIMEOUT && MessageQueue.peek().sent) {
                    Log.i(TAG, "Message timed out: " + HexDump.dumpHexString(MessageQueue.poll().Msg.getBytes()));
                }
            } catch (NullPointerException e) {
                // Queue empty
            }
        }
    }
};

因此,不是记录事件,而是可以从ie增加任务的心率。 100至10000毫秒

Timer mTimer = new Timer();
mTimer.scheduleAtFixedRate(WriterTask,100L,10000L);

如果您的数据最终发送,则只需取消时间表

mTimer.cancel();