我有一个使用广播接收器接收文本消息的应用程序。它尝试将它们上传到服务器,如果失败则必须重试。
我想知道哪个是重试上传的好方法。我是否应该使用某种计时器来触发诸如 BroadcastReceiver 之类的事件来每隔一段时间重试发送消息(如何?)或其他什么?
我有一个使用广播接收器接收文本消息的应用程序。它尝试将它们上传到服务器,如果失败则必须重试。
我想知道哪个是重试上传的好方法。我是否应该使用某种计时器来触发诸如 BroadcastReceiver 之类的事件来每隔一段时间重试发送消息(如何?)或其他什么?
您可以使用 Android AlarmManager 系统。您可以安排一项服务继续尝试上传您的数据,以防您遇到超时(如 diva 所说)或第一次尝试中的任何其他 IO 问题。
请参考:https ://developer.android.com/training/scheduling/alarms.html了解更多关于警报的信息。
另一个有用的链接:
如果您出于某种原因不想使用系统警报,您也可以尝试在“重试循环”中使用 Thread.sleep(),假设您正在使用服务、AsyncTask 等。(不要调用Thread.sleep 在主线程中!)
如果您超时并再次点击上传,如果延长此时间,这是值得的..
DefaultHttpClient h;
// ...
Log.d(TAG, "http.socket.timeout: " +
h.getParams().getParameter("http.socket.timeout"));
Log.d(TAG, "http.connection.timeout: "
+ h.getParams().getParameter("http.connection.timeout"));
您可以尝试使用JobScheduler来安排您的上传任务。
如果任务失败,只需调用 jobFinished(mJobParam, needsReschedule),您的任务将被重新安排
如果要设置重试策略或任务失败时等待的重试间隔,可以设置 setBackoffCriteria(long initialBackoffMillis, int backoffPolicy)
我希望这可以帮助你。