调用“StartActivityForResult”时保持活动“活着”

时间:2015-02-14 22:16:59

标签: android android-intent android-activity camera

我一直在努力创建一个活动结果,但保持调用者活动似乎是不可能的。

我已尝试在清单中设置调用者活动" android:onConfigChanges"用于screenSize,orientation和keyboardHidden。

这非常重要,因为在调用者Activity中,Asyn Task从Web服务加载内容。

当在拍摄照片后恢复活动时,调用者活动被破坏并从Web服务再次加载整个UI并销毁用户输入。有办法防止这种情况吗?

这是相机意图的来电方法。

private void openCamera(){
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            //takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); <- Commented and not commented with the same problem.
            // Create the File where the photo should go
            try {
                photoFile = createImageFile();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            // Continue only if the File was successfully created
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile));
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    }

这是&#34; createImageFile()&#34;:

private File createImageFile() throws IOException {
    // Create an image file name
    File file;
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp + "_";
    File storageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "myAppDirectory");
    if (!storageDir.mkdir()){
        storageDir.mkdirs();
    };

    file = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );

    mCurrentPhotoPath = file.getAbsolutePath();
    return file;
}

1 个答案:

答案 0 :(得分:2)

  

我一直在努力创建一个活动结果,但保持调用者活动似乎是不可能的。

最有可能的是,由于内存不足,您的进程正在终止。当使用ACTION_IMAGE_CAPTURE或其他启动第三方相机应用的操作时,这是相当典型的。它也发生在许多其他地方,因为你的应用程序的过程不会永远存在。

  

这非常重要,因为在调用者Activity中,Asyn Task从Web服务加载内容。

请注意,当您的流程终止时,很多其他情况,您需要能够处理此问题。因此,如果您的问题是重新进行Web服务调用,请将先前调用的结果缓存到文件中,并且只有在缓存的结果过时时才重新发出调用。您可能还会考虑您的活动是否应该进行此Web服务调用,将该逻辑转换为IntentService