[android] AsyncTask에 여러 프리미티브 매개 변수를 전달하려면 어떻게해야합니까?



Answers

또 다른 방법은 MyTask 클래스에 MyTask 생성자를 추가하기 만하면됩니다.

private class MyTask extends AsyncTask<String, Void, Void> {
    int foo;
    long bar;
    double arple;

    MyTask(int foo, long bar, double arple) { 
         // list all the parameters like in normal class define
        this.foo = foo;
        this.bar = bar;
        this.arple = arple;
    }
    ......   // Here is doInBackground etc. as you did before
}

그럼 전화 해.

new MyTask(int foo, long bar, double arple).execute();

David Wasser의 대답과 같은 두 번째 방법.

Question

AsyncTask 클래스에 2 개의 매개 변수를 전달하는 방법 과 같은 관련 질문이 있습니다 . ,하지만 AsyncTask에 여러 프리미티브를 매개 변수로 전달하기가 힘들어서 내가 발견 한 것을 공유하려고합니다. 이 미묘함은 기존의 질문과 답변에 포착되지 않으므로 동일한 문제가 발생하여 고통을 덜어주는 사람을 돕고 싶습니다.

질문은 이것입니다 : 백그라운드에서 실행될 AsyncTask에 전달하려는 여러 프리미티브 매개 변수 (예 : 두 개의 long)가 있습니다. 어떻게 수행 할 수 있습니까? (내 답변은 ... 잠시 동안이 고생을 한 후에 발견 할 수 있습니다.)




이것은 서브 클래 싱을 통해 해결됩니다. 구글은 공식 안드로이드 AsyncTask 문서에서이 문제 (서브 클래 싱)를 해결하는 예제를 가지고있다 :

http://developer.android.com/reference/android/os/AsyncTask.html

예:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
            totalSize += Downloader.downloadFile(urls[i]);
            publishProgress((int) ((i / (float) count) * 100));
                 // Escape early if cancel() is called
            if (isCancelled()) break;
        }
        return totalSize;
    }

    protected void onProgressUpdate(Integer... progress) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}



말라지시의 방법이 마음에 들지만, 그렇지 않다면 번들 클래스를 사용할 수 없습니까?

 Bundle myBundle = new Bundle();
 myBundle.putInt("foo", foo);
 myBundle.putLong("bar", bar);
 myBundle.putDouble("arple", arple);

그런 다음 번들을 전달하고 MyTask 안에 압축을 풉니 다. 이것은 끔찍한 생각입니까? 맞춤 클래스를 만드는 것을 피하고 나중에 추가 매개 변수를 전달해야하는 경우 유연합니다.




Related