1

我有一个从按钮单击侦听器启动的异步作业。这是一项打印工作,因此它会在一天中一次又一次地发生。我想确保在打印作业之间我没有泄漏线程或对象。我只需要 looper.mylooper.quit() 行吗?

监听器代码是:

    private final Button.OnClickListener cmdPrintOnClickListener = new Button.OnClickListener() {

    public void onClick(View v) {
        enableScreenForUse(false);
        setStatus("Saving any changes");
        saveButtonClicked();
        TwoInchZebraDocket newDocket  = new TwoInchZebraDocket(mRunDetailID, getContentResolver());  //could set this to final if we get problems -> see for details http://stackoverflow.com/questions/11424924/how-can-i-pass-an-object-to-a-new-thread-generated-anonymously-in-a-button-liste/11425012?iemail=1#11425012
        setStatus("Creating docket for printing");
        PrintRunnable target = new PrintRunnable(newDocket, CheckoutActivity.this);
        new Thread(target).start();

      }
};

可运行的目标代码是:

    public void run() {
    Looper.prepare();
    printDocket();
    Looper.loop();
    Looper.myLooper().quit();

}
4

1 回答 1

0

我想你想要的是AsyncTask。如果“printDocket()”正在更新您的 UI 线程,您将不得不参考 looper,这很不方便。

这是开发人员文档:http: //developer.android.com/reference/android/os/AsyncTask.html

基本上,异步线程在 doInBackground() 中工作,UI 更新在 onPostExecute() 中。

于 2012-07-13T02:25:17.490 回答