[android]最佳的方式为日常的网络操作的

发布时间: 2017/3/19 18:04:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

那一刻,我感到有点困惑。什么是"正确的"/"最优"的方法,在日常的网络运营 android 应用程序? 伪代码︰

If newDay
    HTTP Request to server
    If responseOfRequest equals something
        Do something
    If HTTP Request is unsuccessfull (no internet, server down, ...)
        Try again in 1 hour

如何能够做到?我想过 JobService 我的 minSDK,但低于 Android 5。

欢呼声中 DDerTyp

解决方法 1:

你所需要的是 service 运行逻辑中的背景和报警

一点点的理论第一次︰

https://developer.android.com/training/scheduling/alarms.html#tradeoffs

重复报警是一个相对简单的机制与灵活性有限。特别是如果你需要触发网络操作可能无法为您的应用程序,最好的选择。设计不佳的报警可以导致电池消耗和在服务器上把一个重要的负荷。 如果您拥有服务器承载您的应用程序的数据,同步结合使用谷歌云消息 (GCM) adapter 是比更好的解决方案 AlarmManager

https://developer.android.com/training/sync-adapters/running-sync-adapter.html

设备关闭时默认情况下,取消所有警报。

您将需要设置您的应用程序,在开始的时候,但保存的标志,因为在某处报警你不想设置此报警每 time 在用户打开应用程序

if (!appSettings.isAlarmSetUp()) {
    final AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
    final Intent i = new Intent(context, CustomService.class);
    final Intent intentNotRepeat = new Intent(context, CustomService.class);
    final PendingIntent pi = PendingIntent.getService(context, 0, i, 0);

    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + AlarmManager.INTERVAL_HALF_HOUR, AlarmManager.INTERVAL_DAY, pi);

    appSettings.setAlarmSetUp(true);
}

这里更多的信息关于报警︰ https://developer.android.com/training/scheduling/alarms.html#type

正如你所看到的此报警醒来的 CustomService,在那里你会做你的逻辑

public class CustomService extends IntentService {

    public CustomService(String name) {
        super(name);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // Request to server
        client.requestToServer()
                .subscribe(response -> {
                                // Successful response
                                doSomething(response);
                            }
                        },
                        error -> {
                                // Error
                                createAlarmInOneHour();
                        });
    }
}
官方微信
官方QQ群
31647020