Android

[Android,Java] (Deprecated) AsyncTask 대체하기

밤토리세상 2023. 11. 13. 15:20

이전부터 디프리케이트 된다고 말이있었는데 

14부터 막히는거 같아서 이제서야 대응하는점.... (아직 되는걸수도 있다?)

이전에 올린 인앱 업데이트와 짬뽕으로 콜라보를 찍어주어서 같이 대응했었다.

 

앱 로드시 무결성 체크를 하는 업체의 소프트웨어를 사용중인데 제공받은 파일들의 해당 클래스가 AsyncTask 로 되어있고 

혹시나 이것이 막히면서 동작을 안하나 싶어서 괜찮은 클래스를 작성해주신것을 발견! 바로 적용해서 바꾸어 주었다

 

https://calvinjmkim.tistory.com/35

 

안드로이드 (Deprecated) AsyncTask 대체하기

안드로이드에서 백그라운드 작업을 하기 위해 자주 사용하는 AsyncTask가 사망선고를 받았다. 작년 하반기에 올라온 이 커밋에서 AsyncTask에 @Deprecated가 붙었고, 커멘트에 다음과 같이 나와 있다. Asy

calvinjmkim.tistory.com

 

출처 및 자세한 설명은 해당 블로그에서 !!

 

public abstract class ThreadTask<T1,T2> implements Runnable {
    // Argument
    T1 mArgument;

    // Result
    T2 mResult;

    // Handle the result
    public final int WORK_DONE = 0;
    Handler mResultHandler = new Handler(msg -> {
        onPostExecute(mResult);
        return false;
    });
    // Execute
    final public void execute(final T1 arg) {
        // Store the argument
        mArgument = arg;

        // Call onPreExecute
        onPreExecute();

        // Begin thread work
        Thread thread = new Thread(this);
        thread.start();
    }

    @Override
    public void run() {
        // Call doInBackground
        mResult = doInBackground(mArgument);

        // Notify main thread that the work is done
        mResultHandler.sendEmptyMessage(WORK_DONE);
    }

    // onPreExecute
    protected abstract void onPreExecute();

    // doInBackground
    protected abstract T2 doInBackground(T1 arg);

    // onPostExecute
    protected abstract void onPostExecute(T2 result);
}

 

위 클래스를 만들어서 AsyncTask 처럼 사용해주면 된다 

다른 분들이 해결해놓은것도 많았는데 기존것을 거의 손대지 않으면서 적용할수 있다는게 가장 큰 장점인것같다

 

자세한 사용법은 위 분의 블로그 참조!