NewGen

swift background 처리 본문

IOS

swift background 처리

Deep Learning 2020. 10. 22. 20:34

앱 이 동작을 하면서

데이터 송수신, 트랜잭션 등의 작업이 이루어지는 중에 전화오거나, 그냥 사용자가 슬립버튼 눌러버린경우 데이터 깨지거나 앱 죽는 경우 방지를 위해서.... 고려해봄

 

기본적 처리방법.

1. capabilities 설정에 백그라운드모드 넣고 저래 두개 켜줌.

 

 

2.info.plist에 이런거 추가 해주고.... 

 

3. 처리를 원하는 곳에

func beginBackgroundUpdateTask() -> UIBackgroundTaskIdentifier {

        return UIApplication.shared.beginBackgroundTask(expirationHandler: ({}))

    }

 

    func endBackgroundUpdateTask(taskID: UIBackgroundTaskIdentifier) {

        UIApplication.shared.endBackgroundTask(taskID)

    }

만들어 주고,

 

4. 작업처리 할곳에

var taskID : UIBackgroundTaskIdentifier = UIBackgroundTaskIdentifier(rawValue: 0)

DispatchQueue.global(qos: .background).async(execute: {

          taskID = self.beginBackgroundUpdateTask()

        do_work_on_background()

       

        self.endBackgroundUpdateTask(taskID: taskID)

           

        })

 

처리 해주면 됨.

 

기본 개념이 저렇다는 거임.

실제로 데이터 트랜잭션, 송수신은 시점을 잘 보고 백그라운드 큐 매핑 시작점과 엔드포인트를 잡아 주어야 함.

일단 백그라운드 작업큐를 생성하더라도, 너무 오래 걸리면, 처리되지가 않았슴.

그냥 강제로 하이버네이션 모드로 들어감. 이런거 가만해서, 작업 단위를 나누어야 하고, 매핑 시작점 엔드 포인트 설정을 적절히 하여 원할하게 데이터가 처리되도록 하는것이 관건임.

결론. 노가다를 해야 적절하게 처리가 가능했슴.

Comments