而不是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