而不是AsyncTask
,嘗試一個可運行。以下是我所做的與您的代碼非常相似的一些代碼。就我而言,我從條形碼掃描儀獲得了意圖結果,但想法是一樣的。
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
String contents = scanResult.getContents();
//String formatName = scanResult.getFormatName();
if (contents == null)
{
Toast.makeText(getApplicationContext(), this.getString(R.string.error_no_barcode_scanned), Toast.LENGTH_LONG).show();
}
else
{
GetProductInfo thread = new GetProductInfo(this, myHandler, contents);
thread.start();
}
}
正如您所看到的,我將一個處理程序傳遞給線程,以便我可以使用任何進度更新UI。如果你看看線程的run()
方法,你可以看到數據被髮送回通過處理程序是這樣的:
Message msg = new Message();
Bundle b = new Bundle();
b.putParcelable(KEY, info);
b.putString(PRODUCTCODE, productCode);
msg.setData(b);
handler.sendMessage(msg);
這解決了這兩個不響應(ANR)問題的應用程序和UI更新問題。
我會提到另一件事。如果您正在使用外部Intent拍攝相機圖像(例如相機應用程序),請確保保存圖像的文件路徑位於兩個應用程序均可訪問的位置。我自己犯了這個錯誤。這是我最終想出的解決方案:
@SuppressLint("SimpleDateFormat")
private File getTempFile() {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "imgfile_" + timeStamp + ".jpg";
return new File(Environment.getExternalStorageDirectory(), imageFileName);
}
我認爲問題是你的「服務」需要更多關於此服務的代碼。 –
如果應用程序被阻止,那通常意味着,您正在忙於工作或等待主線程。網絡不能在主線程上執行,所以這不成問題。在您的應用程序中尋找可能會等待服務完成的點數,否則。否則,請提供代碼。 – damian
我正在將必要的數據傳遞給服務。服務能夠成功執行任務。但是我所稱的服務的活動正在被吊死。 – ravi