[flutter] 플러터 앱의 백그라운드 작업 처리 방법

플러터(Flutter)는 Google에서 개발한 UI 프레임워크로, 다양한 플랫폼에서 동일한 코드로 앱을 개발할 수 있습니다. 하지만 플러터 앱은 기본적으로 화면에 보이는 상태에서만 작동하며, 백그라운드에서 실행되는 작업은 처리할 수 없습니다.

하지만 안드로이드(Android) 및 iOS에서 제공하는 백그라운드 작업 처리 기능을 이용하면, 플러터 앱에서도 백그라운드에서 작업을 수행할 수 있습니다. 이번 블로그 포스트에서는 플러터 앱에서 백그라운드 작업을 처리하는 방법에 대해 알아보겠습니다.

1. 안드로이드에서 백그라운드 작업 처리하기

안드로이드에서는 android_alarm_manager 패키지를 사용하여 백그라운드 작업을 처리할 수 있습니다. 이 패키지는 백그라운드 작업을 스케줄링하고 알람을 설정하는 기능을 제공합니다.

먼저, pubspec.yaml 파일에 android_alarm_manager 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  android_alarm_manager: ^0.4.3

그리고 안드로이드 앱의 MainActivity.kt 파일을 열어 override fun onCreate(savedInstanceState: Bundle?) 함수 안에 다음 코드를 추가합니다.

class MainActivity : FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        AlarmManagerPlugin.registerWith(registrarFor("io.flutter.plugins.androidalarmmanager.AlarmManagerPlugin"))
    }
}

이제 백그라운드 작업을 처리할 dart 파일을 생성합니다. 이 파일에서는 백그라운드 작업을 수행할 로직을 작성합니다.

import 'package:android_alarm_manager/android_alarm_manager.dart';

void bgTask() {
  // 백그라운드 작업 처리 로직 작성
}

void main() async {
  await AndroidAlarmManager.initialize();
  runApp(MyApp());
  await AndroidAlarmManager.periodic(const Duration(minutes: 1), 0, bgTask);
}

class MyApp extends StatelessWidget {
  ...
}

bgTask 함수는 백그라운드 작업을 처리하는 로직을 구현하는 함수입니다. main 함수에서는 AndroidAlarmManager를 초기화하고 periodic 함수를 통해 백그라운드 작업을 주기적으로 실행하도록 설정합니다.

2. iOS에서 백그라운드 작업 처리하기

iOS에서는 background_fetch 패키지를 사용하여 백그라운드 작업을 처리할 수 있습니다. 이 패키지는 iOS에서 제공하는 background fetch 기능을 이용하여 백그라운드 작업을 수행합니다.

먼저, pubspec.yaml 파일에 background_fetch 패키지를 추가합니다.

dependencies:
  flutter:
    sdk: flutter
  background_fetch: ^0.7.0

그리고 iOS 앱의 AppDelegate.swift 파일을 열어 다음 코드를 추가합니다.

import UIKit
import Flutter
import background_fetch

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    BackgroundFetchPlugin.register()
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

이제 백그라운드 작업을 처리할 dart 파일을 생성합니다. 이 파일에서는 백그라운드 작업을 수행할 로직을 작성합니다.

import 'package:background_fetch/background_fetch.dart';

void bgTask() async {
  // 백그라운드 작업 처리 로직 작성
  BackgroundFetch.finish();
}

void main() {
  runApp(MyApp());
  BackgroundFetch.registerHeadlessTask(bgTask);
}

class MyApp extends StatelessWidget {
  ...
}

bgTask 함수는 백그라운드 작업을 처리하는 로직을 구현하는 함수입니다. main 함수에서는 BackgroundFetch를 초기화하고 registerHeadlessTask 함수를 통해 백그라운드 작업을 등록합니다.

3. 정리

위에서는 플러터 앱에서 안드로이드 및 iOS에서 제공하는 백그라운드 작업 처리 기능을 이용하여 백그라운드에서 작업을 수행하는 방법에 대해 알아보았습니다. 이를 통해 플러터 앱의 다양한 기능을 구현할 수 있고, 사용자 경험을 향상시킬 수 있습니다.

더 자세한 내용은 다음 참고 자료를 확인해주세요.