2

私は、デバイスがインターネットに接続されているときにバックグラウンドでサーバーにすべてのデータベースレコードを順番にアップロードするアプリケーションに取り組んでいます。BroadcastReceiverとServiceの代わりにJobSchedulerを使用する

このため、私はBroadcastReceiverと書いてあり、ネットワーク接続をリッスンします。このレシーバがトリガされると、私はレコードをアップロードするバックグラウンドサービスを開始しています。

ここに私のコードです。

public class NetworkChangeReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, final Intent intent) { 
     AppUtils.checkInternetConnection(context)); 
     //If the device has the internet connection and if there are any pending records to upload to server then start the service for uploading the records. 
     if (AppUtils.checkInternetConnection(context)) { 
      if (Database.getInstance().getTotalRecordsCount() > 0) { 
       context.startService(new Intent(context, SurveyUploadService.class)); 
      } 
     } else { 
      context.stopService(new Intent(context, SurveyUploadService.class)); 
     } 
    } 
} 

は今、私の疑問は

1です。私はJobSchedulerを使用して同じことを行うことができますか?
2.私のアプローチ(JobSchedulerを使用したほうがよい)とその理由は何ですか?なぜですか?

答えて

4

私はあなたがBroadcastReceiverのために使用されているアクション知らないが、私はそれが CONNECTIVITY_CHANGE行動だと思います。あなたはそれがおよそAndroid 7.0 Behavior Changes側から次のテキストを読んで使用している場合:

これらの問題を軽減するために、アンドロイド7.0は、次の最適化を適用:アンドロイド7.0をターゲット

  • アプリでも、CONNECTIVITY_ACTION放送を受信して​​いませんこれらのイベントの通知を要求するためのエントリを明示している場合BroadcastReceiverで通知を要求すると、実行中のアプリケーションはメインスレッドでCONNECTIVITY_CHANGEを引き続き聞くことができます。

  • アプリはACTION_NEW_PICTUREまたはACTION_NEW_VIDEOブロードキャストを送受信できません。この最適化は、Android 7.0をターゲットとするアプリだけでなく、すべてのアプリに影響します。あなたが適切にアンドロイド7.0のデバイスをターゲットにすることができるように

アプリケーションがこれらの意図のいずれかを使用している場合は、できるだけ早くそれらの依存関係を削除する必要があります。 Androidフレームワークは、これらの暗黙のブロードキャストの必要性を軽減するためのいくつかのソリューションを提供します。 例えば、JobScheduler APIは、測定されていないネットワークへの接続()などの特定の条件が満たされたときにネットワーク操作をスケジュールする堅牢なメカニズムを提供します。 JobSchedulerを使用して、コンテンツプロバイダの変更に対応することもできます。

したがって、JobScheduler APIを使用する方が良いです。

ここにはExample of JobSchedulerがあります。

+0

CONNECTIVITY_CHANGEとCONNECTIVITY_ACTIONの違いは何ですか? – Kartheek

+0

https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTIONを見ると、CONNECTIVITY_ACTIONは「android.net.conn.CONNECTIVITY_CHANGE」という値を持つ定数の名前です。 – Chris

+0

これは大変ありがとうございます – Kartheek