如何在Android中安排一项任务,该任务将在Internet可用后立即运行并在失败时重新安排



需要调度程序到

  • 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 Network Manager的OneOftask处理,但即使有Internet可用,也至少需要30秒才能执行。

是否还有其他调度程序将全部以上任务。

使用广播接收器,该广播接收器可以收听网络连接性更改。并检查天气该设备连接到Internet或不使用ConnectivitionManager。如果您的设备连接到Internet,请安排您的任务。

使用广播接收器。添加以下几行以表现出来。

<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;
    }
}}

为此,您需要设置一个"广播",一旦设备启动Internet或在接收器上启用,接收器将向您发送回调,然后您可以安排在此处。

您可以使用broadcastreceiver来收听网络状态,如果可以使用网络,请启动调度程序。对于调度程序,您可以用户计划ExecutorService。例如..

opecutors.newsinglethreadscheduledexecutor()。 @Override public void run(){ //在这里致电tast } },0,10,间隔时间);

  1. 无需使用服务
  2. 通过使用广播也可以做到。
  3. 当广播获得互联网状态时,您可以检查状态并进一步执行您的状态。
  4. 希望对您有所帮助,如果没有,请让我知道我会提供代码。用适当的解释。

请单击此处检查此链接

最新更新