Android otwarcie JavaCameraView z AsyncTaska

0

Dzień dobry,

posiadam Activity, które hostuje 4 fragmenty i przełącza między nimi za pomocą BottomNavigationDrawer. Dla potrzeb testów odseparowałem obiekt JavaCameraView do AsyncTaska aby uzusyać szybsze przełączanie pomiędzy fragmentami ale niestety nie odczuwam żadnej różnicy - jest wciąż dość powoli jak było (ok. 1 sekunda). Pytanie więc jak mogę zredukować czas otwarcia kamery JavaCameraView poprawiając ten kod? Zminimalizowałem ilość kodu w klasie Fragmentu do minimum aby było czytelnie. Jeśli czegoś jeszcze potrzeba to dorzucę.

Oto wspomniany jeden z moich fragmentów:

public class StageOneFragment extends Fragment implements CameraBridgeViewBase.CvCameraViewListener2 {

public CameraBridgeViewBase kamera;
public BaseLoaderCallback mLoaderCallback;
public View view;

public StageOneFragment() {
    super(R.layout.stage_one);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    this.view = view
}

@Override
public void onResume() {
    super.onResume();
    new CameraOpenerTask(this).execute();
}

public void configureBaseLoaderCallback() {
    mLoaderCallback = new BaseLoaderCallback(getActivity()) {
        @Override
        public void onManagerConnected(int status) {
            if (status == LoaderCallbackInterface.SUCCESS) {
                Util.setCameraResolutionBasedOnPrefs(resolutionPref, kamera, Objects.requireNonNull(getActivity()));
                kamera.disableView();
                kamera.enableView();
            } else {
                super.onManagerConnected(status);
            }
        }
    };
}

oraz mój AsyncTask:

public class CameraOpenerTask extends AsyncTask<Void, Void, Void> {

private Fragment fragment;

public CameraOpenerTask(Fragment fragment) {
    this.fragment = fragment;
}

@Override
protected Void doInBackground(Void... voids) {
    ((StageOneFragment) fragment).kamera = ((StageOneFragment) fragment).view.findViewById(R.id.java_surface_view);
    ((StageOneFragment) fragment).kamera.setCvCameraViewListener( ((StageOneFragment) fragment));
    ((StageOneFragment) fragment).configureBaseLoaderCallback();
    if (!OpenCVLoader.initDebug())
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_3_0,  ((StageOneFragment) fragment).getActivity(),  ((StageOneFragment) fragment).mLoaderCallback);
    else
        ((StageOneFragment) fragment).mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    return null;
}
}

będę bardzo wdzięczny za podpowiedzi i rozwiązania. Pozdrawiam cieplutko! :)

0

Znalazłem rozwiązanie w postaci Thread.sleep(250); w doInBackground() klasy rozszerzającej AsyncTask. Teraz mniej laguje wątek UI, a kamera startuje zgodnie z oczekiwaniem z lekkim opóźnieniem no i pojawiły się też animacje, które wcześniej nie działały. ciekawe czemu coś takiego dało radę 😆

1 użytkowników online, w tym zalogowanych: 0, gości: 1