5

需要调度器

  • Run task immediately after net is available
  • Reschedule task if it fails because of some problems.
  • should handle cases of broadcast receiver to know if connection available
  • No delay in execution if the internet is already available not like GCMNetworkManager's OneOfTask which take at least 30 seconds to execute the scheduled task

我尝试了GCM 网络管理器的 OneOfTask来处理它,但即使互联网可用,也至少需要 30 秒才能执行。

是否有任何其他调度程序可以将所有上述任务合二为一。

4

4 回答 4

1

使用可以监听网络连接变化的广播接收器。并检查设备是否已连接到 Internet 或未使用 ConnectivityManager。如果您的设备已连接到互联网,则安排您的任务。

使用广播接收器。将以下行添加到清单。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<receiver android:name="yourpackage.ConnectivityReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>

监听类:

package yourpackage;

public class ConnectivityReceiver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
     final String action = intent.getAction();
     switch (action) {
        case ConnectivityManager.CONNECTIVITY_ACTION:

            ConnectivityManager connMgr = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isConnected()) {
                //start schedule 
            }else{
                //stop schedule 
            }
            break;
    }
}}
于 2016-12-19T05:52:42.437 回答
0
  1. 无需使用服务
  2. 通过使用广播你也可以做到。
  3. 当广播接收到互联网的状态时,您可以检查状态并做进一步的事情。
  4. 希望对您有所帮助,如果没有,请告诉我,我将提供代码。有适当的解释。

请点击这里检查这个链接

于 2016-12-19T06:10:03.707 回答
0

为此,您需要在设备关闭或打开互联网后设置“广播”,然后接收器将向您发送回调,然后您可以在那里安排任务。

于 2016-12-19T05:57:18.010 回答
0

您可以使用 BroadcastReceiver 来监听网络状态,如果网络可用,则启动调度程序。对于调度程序,您可以使用 ScheduledExecutorService。例如..

Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(new Runnable() { @Override public void run() { // 在这里调用 tast } }, 0, 10, IntervalTime);

于 2016-12-19T06:02:27.463 回答