Что происходит с потоками АКТИВНОСТИ, если экран выключен и отсоединен от зарядного устройства?

#android #session #android-activity #screen #thread-sleep

#Android #сеанс #android-активность #экран #поток-спящий режим

Вопрос:

У меня есть приложение, которое работает в сеансе пользователя, который поддерживается между сервером и устройством. Я использую метод пинга, чтобы поддерживать сеанс между устройством и сервером, отправляя пинг серверу каждые 1 минуту, если пользователь вошел в систему. Это делается с помощью фонового потока.

  1. Иногда, когда я выключаю экран и отсоединяю устройство от источника питания, фоновый поток прерывается.

  2. Иногда поток активен, но мои антенны Wi-Fi отключаются, и мой ping завершается сбоем.

Правильный ли мой подход? Есть ли лучший способ сделать это?

Мое требование: Мне нужно пинговать мой сервер каждую минуту, чтобы поддерживать сеанс в рабочем состоянии по разным причинам, и я должен делать это, только если пользователь вошел в систему.

Ответ №1:

Вы можете использовать это для проверки вашего Wi-Fi соединения

 private boolean checkInternetConnection()
{
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
    return conMgr.getActiveNetworkInfo().isConnectedOrConnecting();
}
  

если checkInternetConnection () == false, вы можете включить Wi-Fi, используя это в своем манифесте

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
  

и это в вашем коде

 WifiManager wifiManager;
wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
if(wifiManager.isWifiEnabled()){
   wifiManager.setWifiEnabled(false);
}else{
   wifiManager.setWifiEnabled(true);
}
  

Я надеюсь, что это поможет вам, хотя это не точный ответ на ваш вопрос.

Комментарии:

1. Отлично. Спасибо, Джордж. Но рекомендуется ли приложению подключаться к Wi-Fi без ведома пользователя? Как справиться, если пользователь не находится в зоне действия любого Wi-Fi? Должно ли приложение использовать данные сотовой связи? Могу ли я обрабатывать данные сотовой связи, как мы делаем для Wi-Fi?

2. Когда пользователь устанавливает ваше приложение, он прочитал все разрешения на использование, поэтому вы можете подключиться к WIFI без ведома пользователя. Извините, но я сожалею, но я не пытался ответить на эти вопросы, потому что в этом не было необходимости

3. О, это прекрасно. Я имел в виду знания пользователя в том смысле, что когда экран выключен и когда Wi-Fi должен быть выключен, вы запускаете WIFIMANAGER, чтобы включить антенны Wi-Fi и повторно подключиться к сети. Чего пользователь не ожидает. Это нормально? или это плохой способ что-то делать? Просто хочу уточнить это

4. Я не вижу никакой проблемы, когда пользователь устанавливает ваш .apk, он знает, какие разрешения он дает этому .apk ))

Ответ №2:

Используется Log.d для записи сообщений в, Logcat когда Activity происходит событие жизненного цикла, такое как onPause , onStop , onDestroy , onCreate onStart onResume и,,,,,,,,,,,,,,. Также очень полезно создать BroadcastReceiver для регистрации событий трансляции.