0

現在、4 つのメソッドを持つ 1 つのクラスがあります。それを AsyncTask に変更する必要があります。すべてのメソッドは、動作するさまざまなパラメーター (File、int、String ...) を受け取り、post または get を使用してさまざまな URL に接続します。私の質問は、何らかの方法でこれらすべての操作を 1 つの AsyncTask クラスに含めることができるか、またはすべてのメソッドに対して新しい AsyncTask クラスを作成する必要があるかということです。

private class Task extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
     int count = urls.length;
     long totalSize = 0;
     for (int i = 0; i < count; i++) {
     }
     return totalSize;
 }

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

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

1 に答える 1

1

これは、4 つの AsyncTasks をすべて同時に実行する必要があるか、順次実行できるかによって異なります。

現在メインスレッドで実行されているため、順次実行できると思います。必要なすべてのパラメーターを渡して、操作を1つずつ実行するだけです。実際、関数が既に作成されている場合は、それらの関数を AsyncTask クラスに移動するだけです。

MainActivity.java:

public static final int FILE_TYPE = 0;
public static final int INT_TYPE = 1;
public static final int STRING_TYPE = 2;

taskargs = new Object[] { "mystring", new File("somefile.txt"), new myObject("somearg") };

new Task(STRING_TYPE, taskargs).execute();

非同期タスク

private class Task extends AsyncTask<URL, Integer, Long> {
    private Int type;
    private Object[] objects;
    public Task(Int type, Object[] objects) {
        this.type = type;
        this.objects = objects;
    }
    protected Long doInBackground(URL... urls) {
        int count = urls.length;
        long totalSize = 0;
        for (int i = 0; i < count; i++) {
        }
        //obviously you can switch on whatever string/int you'd like
        switch (type) {
            case 0:  taskFile();
                     break;
            case 1:  taskInteger();
                     break;
            case 2:  taskString();
                     break;
            default: break;
        }
        return totalSize;
    }

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

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
    protected void taskFile(){ //do something with objects array }
    protected void taskInteger(){ //do something with objects array }
    protected void taskString(){ //do something with objects array }
}
于 2012-12-11T21:04:41.570 に答える