1. ホーム
  2. android

[解決済み] onActivityResult()の異常な呼び出し

2023-03-02 07:56:11

質問

私は 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 が呼び出されるのは requestCode1458 の直後に MyConfigure アクティビティが実行された直後です。1.6と2.1エミュレータ、および2.1デバイスでテストしています。の呼び出しがあるのでしょうか? setResult() のどこかに埋もれているのでしょうか? PreferenceActivity ? あるいは、この早すぎる呼び出しを他にどのように説明することができますか?

どのように解決するのですか?

この問題は、起動モードを singleTop :

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

Android にはバグ/機能(?)があり、(まだ設定されていない) Activity として宣言された singleTask と宣言されています (アクティビティは実行され続けているにもかかわらず)。もし launchMode から親アクティビティーの singleTask から singleTop に変更した場合、すべてが期待通りに動作し、アクティビティが終了した後に結果が報告されます。この動作には一定の説明がつきますが (1つの singleTask アクティビティは1つしか存在できず、それに対して複数のウェイターが発生する可能性があります)、これはまだ私にとっては論理的ではない制限です。