У меня есть опыт разработки, но новичок в Android разработке. Для Android 7.1 по какой стратегии вы бы настроили фоновую службу (цель состоит в том, чтобы она могла пинговать сервер каждые N секунд). Это для корпоративного проекта, а не для публичного c потребления, потому что это звучит как плохое требование для публичного c использования.
Надеюсь, Android может работать, когда экран заблокирован, и при загрузке устройства.
На данный момент я обнаружил, что на старых версиях ОС Android можно запустить фоновую службу в отдельном процессе, инициированном Broadcast Receiver в событии Boot Completed. Но с более свежими версиями Android ОС, похоже, ограничивает это событие трансляции. Я получил этот тип кода, работающего с Xamarin, но, похоже, он не работает на Android 7.1 (событие широковещательной загрузки завершено не получено).
Одна документация Android предлагает использовать планировщик заданий, но это кажется, работает только во время работы приложения, и кажется, что оно перестает работать, когда ОС идет дремать. Похоже, что ОС Android претерпела значительные изменения после публикации, например, в 2011/2014 годах, и это довольно странное требование, поэтому размещение здесь.
Пример кода (Xamarin C#): (Это для Android 7.1)
BroadcastReceiver
public class MyBroadcastReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
//Toast.MakeText(context, "Broadcaster receiver", ToastLength.Long).Show(); //no breakpoint hit or toast appears
Intent startServiceIntent = new Intent(context, typeof(DemoService));
context.StartService(startServiceIntent);
}
}
AndroidManifest. xml
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme">
<receiver android:name="MyNamespace.MyBroadcastReceiver" android:enabled="true" android:exported="true" android:label="BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service android:name="md5a0cbbf8da641ae5a4c781aaf35e00a86.DemoService" android:directBootAware="true" />
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />