我有一个从按钮单击侦听器启动的异步作业。这是一个印刷工作,所以它会在一整天内一次又一次地发生。我想在打印作业之间确保我没有泄漏线程或对象。我的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();
}
答案 0 :(得分:0)
我认为你想要的是AsyncTask。如果“printDocket()”正在更新你的UI线程,你将不得不引用looper,这是不方便的。
以下是开发人员文档:http://developer.android.com/reference/android/os/AsyncTask.html
基本上,doInBackground()中的异步线程工作和onPostExecute()中的UI更新。