Java 我的android应用程序每5秒只打印一张票

Java 我的android应用程序每5秒只打印一张票,java,android,printing,bluetooth,zebra-printers,Java,Android,Printing,Bluetooth,Zebra Printers,首先,感谢您花时间阅读我的问题。 在Java编程方面,我仍然是一个新手,我非常感谢任何建议或帮助 应用程序 我编写了一个小型android应用程序,它通过蓝牙打印机打印工作卡票据 问题 我的应用程序每5秒钟只能打印一张工单,这意味着如果在5秒钟内捕获第二张工单,应用程序不会打印工单 我想要什么 我真的希望应用程序连续打印出每一张工作卡的记录单 我想我在异步任务、线程(蓝牙通信)等的细节以及何时使用什么类中迷失了方向 任何关于如何使用这些类的最佳实践的指导方针都是非常受欢迎的。 我已经粘贴了一些源

首先,感谢您花时间阅读我的问题。 在Java编程方面,我仍然是一个新手,我非常感谢任何建议或帮助

应用程序 我编写了一个小型android应用程序,它通过蓝牙打印机打印工作卡票据

问题 我的应用程序每5秒钟只能打印一张工单,这意味着如果在5秒钟内捕获第二张工单,应用程序不会打印工单

我想要什么 我真的希望应用程序连续打印出每一张工作卡的记录单

我想我在异步任务、线程(蓝牙通信)等的细节以及何时使用什么类中迷失了方向

任何关于如何使用这些类的最佳实践的指导方针都是非常受欢迎的。 我已经粘贴了一些源代码,我怀疑这可能是问题的根源

设备: Zebra RW420打印机(Zebra SDK)

日志上写着: 03-06 20:17:04.328:W/BluetoothAdapter(25552):getBluetoothService() 在没有Bluetooth Manager的情况下调用Callback 03-06 20:17:04.328: W/BluetoothAdapter(25552):调用getBluetoothService()时没有 Bluetooth Manager Callback 03-06 20:17:04.386:D/dalvikvm(25552): GC_并发释放133K,9%释放4079K/4468K,暂停17ms+23ms,总计

源代码: MainScreen.java

public class MainScreen extends Activity {

submitBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub                                              
               //Do printing
                    String tpl = "Hello World!";
                    new PrintTask().execute(tpl);                    
            }
        });       
   }

//Async Printing Task
private class PrintTask extends AsyncTask<String, Integer, String> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                uiHelper.showLoadingDialog("Printing, please wait...");                                 
            }

            @Override
            protected String doInBackground(String... params) {
                String msg = params[0];                                 
                print(msg);                                                                 
                publishProgress(1);                 
                return "All Done!";
            }

            @Override
            protected void onProgressUpdate(Integer... values) {
                super.onProgressUpdate(values);
                uiHelper.updateLoadingDialog("Printing jobcard " + values[0]);              
            }

            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(result);
                uiHelper.dismissLoadingDialog();
                finish(); //close the window
            }
        }

    public void print(String tpl) {
        final String msg = tpl;     
        //runOnUiThread(new Runnable()
        new Thread(new Runnable() {
            public void run() {                                                             
                Looper.prepare();
                printer_ob.printMessage(msg);               
                Looper.loop();
                Looper.myLooper().quit();                
            }
        }).start();                     
    }

}

我认为您必须使用
IntentService
而不是
AsyncTask
。IntentService处理异步请求,还具有用于排队的内置功能。查看链接以获取有关IntentService的更多信息。

您在整个代码中都有一大堆
DemoSleep.sleep()
调用,听起来好像要在一段时间内阻止执行。它在
open()
之后休眠1秒,然后在
write()
之后休眠几秒钟,与打印机的通信肯定需要一些时间


这就是导致打印速度慢的原因吗?你能试着把它们去掉吗?打印时不需要它们

谢谢,我会看一看。啊,是的,这不是我的代码,它是zebra SDK的一部分。我将删除它们,看看打印速度是否有所提高。好地方!
public class ZebraPrinterHelper {
    Context context;
    private ZebraPrinterConnection zebraPrinterConnection;
    private RadioButton btRadioButton;
    private ZebraPrinter printer;
    private TextView statusField;
    private EditText macAddress, ipDNSAddress, portNumber;
    private Button testButton;  

    public ZebraPrinterHelper(Context c) {
        context = c;
    }

    public ZebraPrinter connect() {

        zebraPrinterConnection = null;      
        zebraPrinterConnection = new BluetoothPrinterConnection(SettingsHelper.getBluetoothAddress(context));               

        try {
            zebraPrinterConnection.open();          
        } catch (ZebraPrinterConnectionException e) {       
            Toast.makeText(context, "Comm Error! Disconnecting", 500).show();
            DemoSleeper.sleep(1000);
            disconnect();
        }
        ZebraPrinter printer = null;

        if (zebraPrinterConnection.isConnected()) {
            try {
                printer = ZebraPrinterFactory.getInstance(zebraPrinterConnection);
                //setStatus("Determining Printer Language", Color.YELLOW);
                PrinterLanguage pl = printer.getPrinterControlLanguage();
                //    setStatus("Printer Language " + pl, Color.BLUE);
            } catch (ZebraPrinterConnectionException e) {
                //"Unknown Printer Language");
                Toast.makeText(context, "Error, Unknown printer language", 500).show();
                DemoSleeper.sleep(1000);
                printer = null;
                DemoSleeper.sleep(1000);
                disconnect();
            } catch (ZebraPrinterLanguageUnknownException e) {
                //setStatus("Unknown Printer Language", Color.RED);
                Toast.makeText(context, "Error, Unknown printer language", 500).show();             
                printer = null;
                DemoSleeper.sleep(1000);
                disconnect();
            }
        }

        return printer;         
    }

    private void writeMessage(byte[] message) {
        //message in bytes      
        try {           
            zebraPrinterConnection.write(message);              
            DemoSleeper.sleep(1500);
            if (zebraPrinterConnection instanceof BluetoothPrinterConnection) {
                String friendlyName = ((BluetoothPrinterConnection) zebraPrinterConnection).getFriendlyName();                  
                DemoSleeper.sleep(500);
            }
        } catch (ZebraPrinterConnectionException e) {
            //helper.showErrorDialogOnGuiThread("Error:" + e.getMessage());
            Log.d("Error",e.getMessage());
        } finally {
            disconnect();
        }
    }



        public void printMessage(String message) {
            byte[] msg = null;          
            msg = message.getBytes();

            //check connections

            printer = connect();
            if (printer != null) {
                writeMessage(msg);
            } else {
                disconnect();
            }

        }

        public void disconnect() {
            try {           
                if (zebraPrinterConnection != null) {
                    zebraPrinterConnection.close();
                }               
            } catch (ZebraPrinterConnectionException e) {
                //setStatus("COMM Error! Disconnected", Color.RED);
            } finally {

            }
        }
    }