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 Network Manager の OneOfTaskを試してみましたが、インターネットが利用可能であっても実行に少なくとも 30 秒かかります。

上記のすべてのタスクを 1 つにまとめる他のスケジューラはありますか。

4

4 に答える 4

1

ネットワーク接続の変更をリッスンできるブロードキャスト レシーバーを使用します。デバイスがインターネットに接続されているか、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

BroadcastReceiver を使用してネットワーク ステータスをリッスンし、ネットワークが利用可能な場合はスケジューラを開始できます。スケジューラの場合、ScheduledExecutorService を使用できます。例えば..

Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(new Runnable() { @Override public void run() { // ここで tast を呼び出します } }, 0, 10, IntervalTime);

于 2016-12-19T06:02:27.463 に答える