经过几个月的调试,我们现在能够在前台服务中运行所有与网络相关的代码。
然而,在Android Vital中仍然会收到“后台中的过度网络使用”的警告。
当执行前台服务代码时,状态栏区域将始终显示通知 UI。
当我们“退出”应用程序时,我们使用WorkManager
启动前台服务。WorkManager
将在前台服务启动后立即返回。
public class SyncWorker extends Worker {
@NonNull
@Override
public Result doWork() {
final Intent intent = new Intent(WeNoteApplication.instance(), SyncForegroundIntentService.class);
ContextCompat.startForegroundService(
WeNoteApplication.instance(),
intent
);
return Result.success();
}
}
public class SyncForegroundIntentService extends IntentService {
private static final String TAG = "com.yocto.wenote.sync.SyncIntentService";
public SyncForegroundIntentService() {
super(TAG);
}
@Override
protected void onHandleIntent(@Nullable Intent intent) {
final Context context = WeNoteApplication.instance();
NotificationCompat.Builder builder = new NotificationCompat.Builder(...
startForeground(SYNC_FOREGROUND_INTENT_SERVICE_ID, builder.build());
// Perform networking operation within foreground service.
stopForeground(true);
侧记
我们认为我们发送的数据量并不多。正如您可以看到的,我们的最新版本已经落入了最低范围(每小时0-5 MB)。
有任何想法,为什么我们仍然会收到“过度网络使用(后台)”的警告?显然,在后台我们不再执行任何网络调用。
我们使用了https://developer.android.com/reference/android/app/Service.html#startForeground(int,%20android.app.Notification) 和 https://developer.android.com/reference/android/content/Context.html#startForegroundService(android.content.Intent)
startForeground
添加到你的意图服务中,那么我不确定你期望得到什么,因为你似乎没有解决发送大量数据的核心问题。 - tyczj