2

Я работаю над приложением, которое будет загружать все мои записи базы данных на сервер последовательно в фоновом режиме, когда устройство подключено к Интернету.Использование JobScheduler вместо BroadcastReceiver и службы

Для этого я написал 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:

Чтобы облегчить эти проблемы, Android 7.0 применяет следующие оптимизации:

  • Программы ориентации Android 7.0 не получает CONNECTIVITY_ACTION передач, даже если они имеют манифестные записи, чтобы запросить уведомление об этих событиях. Приложения, которые работают, все равно могут прослушивать CONNECTIVITY_CHANGE в своем основном потоке, если они запрашивают уведомление с помощью BroadcastReceiver.

  • Приложения не могут отправлять и получать ACTION_NEW_PICTURE или ACTION_NEW_VIDEO трансляции. Эта оптимизация влияет на все приложения, а не только на Android 7.0.

Если ваше приложение использует любой из этих намерений, вы должны удалить зависимости от них как можно скорее, так что вы можете предназначаться для Android 7.0 устройств правильно. Рамка Android предлагает несколько решений для смягчения необходимости этих неявных трансляций. Например, API JobScheduler предоставляет надежный механизм для планирования сетевых операций, когда выполняются указанные условия, такие как подключение к немаршрутизированной сети. Вы даже можете использовать JobScheduler для реагирования на изменения в контент-провайдерах.

Так что лучше использовать API JobScheduler.

Адрес 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

Смежные вопросы