Android - 在onActivityResult中调用startActivityForResult有多安全?

时间:2015-03-10 15:03:30

标签: android android-activity

我正在设计一个应用程序,它根据之前调用的活动的返回值调用多个子活动之一。例如,活动A可能导致B或C,B可能再次导致A,B或D。

显而易见的方法是让子活动设置一个值,指示要调用的下一个子活动,然后将其传递回父级,然后在父级的onActivityReturn方法中调用另一个子活动{{ 1}}基于该值。我假设startActivityForResult是异步的,因此startActivityForResult方法在子活动返回之前会或者至少可以继续(并完成)。

这一定安全吗?如果被调用的活动在调用它的onActivityReturn完成之前返回,会发生什么?

3 个答案:

答案 0 :(得分:0)

如果您的流量受适当条件控制,则不会产生任何问题, 即使是更安全的一面,您的流程允许您通过定义

来创建单个实例
android:launchMode="singleInstance"

答案 1 :(得分:0)

你也可以在发送给父母之前完成(销毁)任何孩子

你也可以:

android:launchMode="singleInstance"

答案 2 :(得分:0)

实际上,如果没有可以接受您意图的应用程序,您应该预测情况,因此如果没有此类应用程序,您的应用程序将崩溃。看一下这个例子:

    // Actions for change cover button
    Button setImageButton = (Button)   rootView.findViewById(R.id.set_image_button);

    setImageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);

            ComponentName activity = photoPickerIntent.resolveActivity(getActivity().getPackageManager());
            photoPickerIntent.setType("image/*");

            if (activity != null) {
                startActivityForResult(photoPickerIntent, SELECT_PHOTO);
            } else {
                Toast.makeText(getActivity().getBaseContext(), "There are no activities for such intent",
                        Toast.LENGTH_SHORT).show();
            }
        }
    });

所以借助于          ComponentName activity = photoPickerIntent.resolveActivity(getActivity()。getPackageManager()); 你可以检查一切正常。