调用"StartActivityForResult"时保留Activity"alive"

Keep Activity "alive" when calling "StartActivityForResult"

我一直在尽一切努力为结果启动 Activity,但保持调用者 activity 似乎是不可能的。

我已经尝试在清单 "android:onConfigChanges" 的调用方 activity 上设置屏幕大小、方向和键盘隐藏。

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

当 Activity 在拍照后恢复时,调用者 activity 被销毁并再次从 Web 服务加载整个 UI 并销毁用户输入。有什么办法可以避免这种情况吗?

这是相机意图的 Caller 方法。

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);
            }
        }
    }

这是 "createImageFile()":

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;
}

I have been trying everything to start an Activity for Result but keeping the caller activity seems impossible.

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

It is very important because in the caller Activity an Asyn Task loads the content from a Web Service.

请记住,还有 大量 其他情况会终止您的进程,您需要能够处理这种情况。因此,如果您关心的是重新执行 Web 服务调用,请将前一次调用的结果缓存在一个文件中,并且仅在缓存的结果过时时才重新发出调用。您可能还会考虑您的 activity 是否应该执行此 Web 服务调用,而是将该逻辑移至 IntentService.