android - execute 안드로이드 AsyncTask에 여러 프리미티브 매개 변수를 전달하려면 어떻게해야합니까?




3 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의 대답과 같은 두 번째 방법.

안드로이드 동기 비동기

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

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




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

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

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




이것은 서브 클래 싱을 통해 해결됩니다. 구글은 공식 안드로이드 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");
    }
}



Related