関連する質問としては、AsyncTask クラスに 2 つのパラメータを渡すにはどうすればいいですか?しかし、複数のプリミティブをパラメータとして AsyncTask に渡そうとする試みが無駄に終わり、困難に直面したので、私が発見したことを共有したいと思います。この微妙な点は既存の質問と回答には記載されていないため、私と同じ問題に遭遇した人を助け、苦労から解放したいと思っています。
質問はこれです:私は複数の原生的バックグラウンドで実行するために AsyncTask に渡したいパラメータ (例: 2 つの long) がありますが、これはどのように実行できますか? (しばらくこの問題に悩んだ後の私の答えは以下にあります。)
ベストアンサー1
次のように、プリミティブを単純なコンテナにラップし、それを にパラメータとして渡すだけですAsyncTask
。
private static class MyTaskParams {
int foo;
long bar;
double arple;
MyTaskParams(int foo, long bar, double arple) {
this.foo = foo;
this.bar = bar;
this.arple = arple;
}
}
private class MyTask extends AsyncTask<MyTaskParams, Void, Void> {
@Override
protected void doInBackground(MyTaskParams... params) {
int foo = params[0].foo;
long bar = params[0].bar;
double arple = params[0].arple;
...
}
}
次のように呼び出します:
MyTaskParams params = new MyTaskParams(foo, bar, arple);
MyTask myTask = new MyTask();
myTask.execute(params);