基本的に質問はタイトル自体の質問ですが、文脈に沿っています。同じAsyncTaskの異なるインスタンスがローカル変数を共有していますか?
私はVuforiaライブラリを使用してAndroidアプリを開発しています。このアプリケーションは、各フレームでカメラからフレームを取得し、他の情報とともにAsyncTaskをトリガーします。 AsyncTaskの目的は、これらの他の情報を使用して、現実世界の同じ領域に常に対応するイメージの一部をフレームから抽出することです(この部分の後ろの魔法はVuforiaライブラリのアカウントであり、正しく動作しています)。この背後にある計算は時間がかかるので、タスクは次のフレームの前に終了しないので、複数のAsyncTaskが同時に実行され、それぞれ異なるフレームで開始されます。私のテストでは、これらの抽出されたイメージが互いにオフセットしていることに気づいたので、各フレームで実行するさまざまなAsyncTasksインスタンスがローカル変数から情報を共有している可能性があります。この情報は、AsyncTaskコンストラクタを介してローカル変数に割り当てられます。
私は、タスクが情報を共有することが可能かどうかを知りたいのですが、どうすればこれを防ぐことができますか?
AsyncTaskのコンストラクタコードで更新:
GetDataの内部クラスです。
private class GetData extends AsyncTask<Matrix34F, Void, Void>{
SampleAppRenderer mRenderer;
float surfaceH, surfaceW, scaleSF;
int imageW, imageH, screenW, screenH, stride;
short[] pixels;
public GetData(SampleAppRenderer mRenderer, float surfaceH, float surfaceW, Image image){
super();
this.mRenderer = mRenderer;
this.surfaceH = surfaceH;
this.surfaceW = surfaceW;
this.imageW = image.getWidth();
this.imageH = image.getHeight();
Vec2I screenDim = mRenderer.getDimensions();
this.screenW = screenDim.getData()[0];
this.screenH = screenDim.getData()[1];
ByteBuffer bb = image.getPixels();
pixels = new short[bb.remaining()/2];
bb.order(ByteOrder.BIG_ENDIAN).asShortBuffer().get(pixels);
this.stride = image.getStride();
this.scaleSF = (float)screenH/imageW;
}
@Override
protected Void doInBackground(Matrix34F... pose){...}
}
その大きすぎるので、私はdoInBackgroundメソッドのコードをコピーしていないと私はそれが質問の目的のために不必要だと思います。
、各フレームでの呼び出しタスク:
//Vuforia's methods to get frame and pose of camera
Frame frame = state.getFrame();
Matrix34F pose = trackableResult.getPose();
for(int i = 0; i < frame.getNumImages(); ++i){
Image image = frame.getImage(i);
GetData ATinstance = new GetData(mSampleAppRenderer, surfaceHeight, surfaceWidth, image);
ATinstance.execute(pose);
}
私が共有することはしたくない変数が「画像」であり、あなたは彼らに同じ参照番号を渡した場合
ローカルインスタンス変数は共有できません。コンストラクタ内にある場合は、実際に静的メンバー変数にしましたか?たとえば、doInBacground関数内で宣言されている変数は共有されていません。 –
いいえ、静的変数ではありません。私の質問はコンストラクタコードで更新しました。私のAsyncTaskは内部クラスですが、違いはありますか? –