私のアプリケーションには、メイン アクティビティ A と、メニューを介してメイン アクティビティ A からのみ開始できるその他のいくつかのアクティビティ B、C、D、E が含まれています。たとえば、アクティビティ B で [戻る] ボタンをクリックすると、常にメインのアクティビティ A に戻ります。
もう一度考えてみると、アクティビティ B にいるので、[ホーム] ボタンをクリックします。次に、アプリの起動アイコンをクリックしてアプリに戻ると、動作が異なります。
- Gingerbread (エミュレーターでテスト済み) では、これによりアクティビティ B が表示され、[戻る] ボタンを押してアクティビティ A に戻ることができます。
- ICS では動作が異なります。これにより、新しいアクティビティ A が開始され、A の [戻る] ボタンをクリックすると B に戻ります。
もう 1 つの例として、メイン アクティビティ A で [ホーム] ボタンをクリックしたとします。次に、起動アイコンをクリックします。
- Gingerbread では、これによりアクティビティ A が再開されます。したがって、戻るボタンをクリックすると、アプリから存在します。
- ICS では、これにより新しいアクティビティ A が作成されます。したがって、戻るボタンをクリックすると、前のアクティビティ A に戻ります。終了するには、A をもう一度クリックする必要があります。
manisfest.xml の内容は次のとおりです。
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="10"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"/>
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".B"
android:configChanges="orientation"
android:screenOrientation="portrait">
</activity>
<activity
android:name=".C"
android:configChanges="orientation"
android:screenOrientation="landscape">
</activity>
<activity
android:name=".D"
android:configChanges="orientation"
android:screenOrientation="landscape">
</activity>
<activity
android:name=".E"
android:configChanges="orientation"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="com.perfexpert.intent.ACTIVITY_E" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".A"
android:configChanges="orientation"
android:screenOrientation="portrait"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
そして、メインアクティビティからアクティビティを開始するために使用されるコード:
startActivityForResult(new Intent(this, B.class), REQUEST_CODE_B);
ICS でこのように異なる動作をするのはなぜですか? ICS でジンジャーブレッドの動作を取得するには?
Android Developers サイトによると、予想されるのは次のとおりです。
たとえば、現在のタスク (タスク A) のスタックに 3 つのアクティビティがあり、現在のアクティビティの下に 2 つあるとします。ユーザーはホーム ボタンを押し、アプリケーション ランチャーから新しいアプリケーションを起動します。ホーム画面が表示されると、タスク A はバックグラウンドに入ります。新しいアプリケーションが開始されると、システムはそのアプリケーションのタスク (タスク B) を独自のアクティビティ スタックで開始します。そのアプリケーションと対話した後、ユーザーは再びホームに戻り、最初にタスク A を開始したアプリケーションを選択します。ここで、タスク A が前面に表示されます。スタック内の 3 つのアクティビティはすべてそのままで、スタックの一番上にあるアクティビティが再開されます。
これは、エミュレータ (Gingerbread) では発生する動作ですが、Nexus S (ICS) では発生しません。
ありがとう