Q:

Como evitar que se duplique un Activity de Android

Actualmente estoy trabajando con un POS WEB que incluye el escaneo de código de barras. Para esto el POS esta en un WebView, y cuando le doy clic al botón para leer el código de barras codifico la url para mandar llamar el activity del lector de código de barras, ya que este es nativo de Android.
webView.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            view.setVisibility(View.GONE);
            ibtnRefresh.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            progressBar.setVisibility(View.VISIBLE);
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }

        @Override
        public void onLoadResource(WebView view, String url) {
            showPB();
            if(!url.contains("sendScanReader"))
            {
            }else if(!url.contains("Settings")) {

            }else{
                view.loadUrl(Common.getURL());
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            //Toast.makeText(getApplicationContext(),"Carga Finalizada",Toast.LENGTH_LONG).show();
            hidePB();
            if(url.contains("sendScanReader"))
            {
                hidePB();
                Intent i = new Intent(getApplicationContext(),Main2Activity.class);
                startActivityForResult(i,100);

            }else if(url.contains("vta")){...

El problema radica en que al parecer Main2Activity (que es el activity de lectura) se abre 2 veces. Asi que cuando hago el proceso para el handleResult, se "cierra" el lector, pero la app me muestra nuevamente el activity.
Este el el HandleResult del activity lector
@Override
public void handleResult(Result rawResult) {
    // Do something with the result here
    Log.v("main", rawResult.getText()); // Prints scan results
    Log.v("main", rawResult.getBarcodeFormat().toString()); // Prints the scan format (qrcode, pdf417 etc.)

    String newURL = Common.getURL()+"?"+rawResult.getText();
    Common.setURL(newURL);

    mScannerView.stopCamera();           // Stop camera on pause
    mScannerView = null;
    Intent i = new Intent(getApplicationContext(),Main.class);
    setResult(Activity.RESULT_OK, i);
    finish();
}

Aqui el fragmento del manifest. Ya intente tambien con singleInstance pero no me da resultado.
<activity android:name=".Main2Activity"
            android:launchMode="singleTask"/>

¿Alguna sugerencia?
Edit:
Agrego el codigo de showPB() y hidePb() para evitar posibles confusiones.
public void showPB(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {

            progressBar.setVisibility(View.VISIBLE);
        }
    });
}

public void  hidePB(){
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            //Toast.makeText(getApplicationContext(),"Funcion para ocultar PB",Toast.LENGTH_LONG).show();
            progressBar.setVisibility(View.GONE);
        }
    });
}

A:

Quedo resuelto. Lo que hice fue simplemente agregarle flags a mi Intent.
@Override
    public void onPageFinished(WebView view, String url) {
        //Toast.makeText(getApplicationContext(),"Carga Finalizada",Toast.LENGTH_LONG).show();
        hidePB();
        if(url.contains("sendScanReader"))
        {
            hidePB();
            Intent i = new Intent(getApplicationContext(),Main2Activity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //esta es la linea nueva con la que evito los duplicados.
            startActivityForResult(i,100);

