保存图像后应用程序被挂起

时间:2013-12-10 14:10:02

标签: android service

我正在使用以下代码捕获图像。

Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imgFile));

startActivityForResult(camera, CAMERA_PIC_REQUEST );

并且在onActivityResult内部,如果resultCode是RESULT_OK,那么iam按顺序启动服务以将捕获的图像上传到Webservice。我能够成功调用Webservice。但问题是应用程序被绞死我的意思是,活动正在被绞死。我无法在活动中执行任何操作。

提前致谢。

2 个答案:

答案 0 :(得分:1)

启动Asyntask而不是服务以将图像上传到网络。服务在Ui Thread上运行但asyntask在后台运行,不会挂起应用程序。  它完美地运作。

如果有帮助,请投票或标记为真。

答案 1 :(得分:0)

而不是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);
}