0

これを行うquitメソッドがあります:

public void quitFinalize(ServicedActivity actCtx)
{   
    for (ServicedActivity act : mRunningActivities)
        launchActivity(actCtx, new Intent(mAppCtx, act.getClass()).setAction("--"));
}

mRunningActivities が OK であることを確認しました。作成され、破棄されていないタスク内のすべてのアクティビティで構成されています。すべてのアクティビティは から継承します:

public class ServicedActivity extends FragmentActivity implements OnClickListener
{
    ...

    @Override
    protected void onNewIntent(Intent intent) 
    {
        super.onNewIntent(intent);

        if (/*Intent.ACTION_SCREEN_OFF*/"--".equals(intent.getAction()))            // used for quitting the game
        {
            finish();
        }
    }

        ...
}

セット内の 2 つのアクティビティで、メカニズムが正常に機能していることに気付きました。ただし、3 つのアクティビティの場合、Android 4.0.3 は、セット内のアクティビティの 1 つの別のインスタンスを起動 (作成) する必要があると判断します (特定のアクティビティだけでなく、特定の 1 つのアクティビティを開始するのが特に好きなようです)。そして彼らはそれらをすべて終わらせます(したがって、元の3つの代わりに4つの破壊された活動)

そのアクティビティを誤って作成したのは私ではないと確信しています - すべての launchActivity ロジックは、FLAG_ACTIVITY_REORDER_TO_FRONT フラグをインテントに追加するメソッドによってフィルタリングされるため、同じ Activity クラスの 2 つのインスタンスで終わることはありません。それを新たに作成しているのはOSであるに違いありません。

また、「android:launchMode="singleTop"」マニフェスト ファイル プロパティなしで試してみました。これは、アプリ内のすべてのアクティビティでこのようなものです。同じこと。

ここで何が起こっているのですか?上記の onNewIntent() メソッドは予想どおり 3 回ヒットしますが、途中で Android が新しいアクティビティを作成し、すぐにそれも終了します。

ありがとう


4

1 に答える 1