启动zxing-android-embedded时的UI线程块

时间:2015-04-01 16:42:42

标签: android multithreading android-asynctask zxing progressdialog

所以我使用https://github.com/journeyapps/zxing-android-embedded将条形码扫描程序嵌入到我的应用程序中。问题是它需要一段时间才能启动,2到4秒。在那个时候UI挂起,我把它添加到AsyncTask并且UI不再挂起,但我添加到AsychTask的progressdialog没有显示。当我向doInBackground添加一个thread.sleep时,对话框会显示,但是当thread.sleep结束时再次挂起。任何人都知道如何让用户知道扫描仪正在加载?

class loadScanner extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute(){
        progress = new ProgressDialog(MainActivity.this);
        progress.setTitle("Loading");
        progress.setMessage("Wait while loading scanner...");
        progress.setCancelable(false);
        progress.setIndeterminate(true);
        progress.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        integrator = new IntentIntegrator(MainActivity.this);
        integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES);
        integrator.setWide();
        integrator.setOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        integrator.initiateScan();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        progress.dismiss();
    }
}

2 个答案:

答案 0 :(得分:0)

将微调器代码移出AsyncTask。 在异步任务上调用.execute之前将其放入。

答案 1 :(得分:0)

我遇到了同样的问题!

修复它以更新zxing版本!

Gradle刚刚提出了以下问题:

compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
compile 'com.google.zxing:core:3.2.1'