[android] onActivityResult ()가 조기에 호출되었습니다.

다음과 같이 내 작업자 활동에서 Activity(의 하위 항목 PreferenceActivity)을 시작합니다 .

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1458)
        loadInfo();
}

void showSettingsDialog()
{
    startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}

MyConfigure클래스에는 setResult()호출 이 없습니다 . 사실, MyConfigure클래스를 제외한 모든 코드가없는 OnCreate()이 사용하는 기본 설정을로드 어디 addPreferencesFromResource.

이제는 활동이 실행 된 직후 에 조기에 onActivityResult호출됩니다 . 1.6 및 2.1 에뮬레이터와 2.1 장치에서 테스트되었습니다. 어딘가에 묻 히라 는 전화가 있습니까? 아니면이 조기 호출을 어떻게 설명 할 수 있습니까?requestCode1458MyConfiguresetResult()PreferenceActivity



답변

이 문제는 시작 모드를 singleTop다음 으로 변경하여 해결되었습니다 .

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTop">

Android에는 (활동이 계속 실행된다는 사실에도 불구하고 )로 Activity선언 된 singleTask( 아직 설정되지 않은) 결과를 즉시보고하는 버그 / 기능 (?)이 있습니다 . launchMode상위 활동을에서 singleTask로 변경하면 singleTop모든 것이 예상대로 작동합니다. 결과는 활동이 완료된 후에 만보고됩니다. 이 동작에는 특정 설명이 있지만 (하나의 singleTask활동 만 존재할 수 있고이를 위해 여러 명의 웨이터가 발생할 수 있음) 이것은 여전히 ​​저에게 논리적 제한이 아닙니다.


답변

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);전화하기 전에 제거한 후 문제를 해결했습니다 fragment.startActivityForResult(intent, 0);.


답변

내 활동에서 모든 사용자 정의 “android : launchMode”를 제거했고 모든 것이 매력처럼 작동했습니다. 안드로이드가 정확히 무엇을 이해하고 있는지 모를 때 이것을 바꾸는 것은 좋은 생각이 아닙니다. 안드로이드는 이런 식으로 약간 까다 롭습니다.


답변

의도에 Intent.FLAG_RECEIVER_FOREGROUND플래그가 설정 되었을 때 이런 일이 발생했습니다 .

(예, 해당 플래그는 활동과 관련이 없지만 다른 문제 에 대한 샷건 솔루션의 일부로 모든 의도에 포함되었습니다 .)


답변

Mayra의 의견에서와 마찬가지로 setResult()문제와 관련이 없습니다. 어떤 이유로 MyConfigure클래스는 자체적으로 완료되고 발생 하면 코드를 작성한 방법이기 때문에 PreferenceActivity결과가있을 수 있다고 가정합니다 MyConfigure.

이것은 startActivityForResult()…로 시작된 모든 활동을 강제로 되돌릴 때도 발생합니다 .

그래서 MyConfigure수업이 왜 강제로 끝났 는지에 초점을 맞추는 것이 낫다고 생각합니다 .


답변