본문 바로가기
안드로이드

[Android] UI에 영향을 주지 않는 백그라운드 작업

by 코딩히어로 2023. 11. 26.
728x90

안드로이드 애플리케이션을 개발할 때, UI 스레드(메인 스레드)에서 시간이 오래 걸리는 작업을 수행하는 것은 애플리케이션의 반응성을 저하시킬 수 있습니다. 

이러한 문제를 방지하기 위해, AsyncTask를 사용하여 백그라운드에서 작업을 수행할 수 있습니다. 

AsyncTask를 사용하면 사용자 인터페이스와 상호작용하지 않는 작업을 백그라운드 스레드에서 실행할 수 있어, 애플리케이션이 부드럽게 실행될 수 있습니다.

 

AsyncTask는 다음과 같은 세 가지 주요 메서드로 구성됩니다

  • doInBackground(Params...): 백그라운드 스레드에서 실행되는 메서드로, 주요 작업이 수행됩니다.
  • onPostExecute(Result): doInBackground가 완료된 후 UI 스레드에서 실행되며, 결과를 처리합니다.
  • onPreExecute(): doInBackground가 시작되기 전에 UI 스레드에서 실행되며, 초기화 작업을 수행합니다.

아래 예제에서는 ScpDownloadTask라는 AsyncTask를 사용하여 파일을 다운로드하고, 다운로드가 완료되면 UI에 알리는 방법을 보여줍니다.

 

private class ScpDownloadTask extends AsyncTask<String, Void, String> {
    private DownloadTaskListener listener;

    public ScpDownloadTask(DownloadTaskListener listener) {
        this.listener = listener;
    }

    @Override
    protected String doInBackground(String... params) {
        // SCP를 사용하여 파일 다운로드
        // 'params'는 필요한 파라미터들(예: URL, 파일 경로 등)
        // 여기서는 실제 다운로드 로직을 구현
        return "파일 경로 또는 상태";
    }

    @Override
    protected void onPostExecute(String result) {
        // 다운로드 완료 후 UI 업데이트를 위해 listener 호출
        if (listener != null) {
            listener.onTaskCompleted();
        }
    }
}

 

콜백 인터페이스 사용하기
다운로드 완료 시 UI에 알리기 위해 콜백 인터페이스를 사용합니다. 아래는 DownloadTaskListener 인터페이스의 구현 예입니다.

 

public interface DownloadTaskListener {
    void onTaskCompleted();
}

 

이 인터페이스는 AsyncTask가 완료될 때 호출됩니다. 예를 들어, 다운로드 진행 상태를 표시하는 프로그레스바를 숨기거나 사용자에게 알림을 제공하는 데 사용할 수 있습니다.

 

AsyncTask와 콜백 인터페이스를 사용하는 이 방법은 안드로이드 애플리케이션에서 백그라운드 작업을 수행하고, 작업이 완료되면 UI에 즉시 반영하는 효율적인 방법을 제공합니다. 이를 통해 애플리케이션의 반응성을 높일 수 있습니다.

728x90
반응형

댓글