2

私のアプリケーションには、メイン アクティビティ 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) では発生しません。

ありがとう

4

2 に答える 2

0

アプリを最初に (初めて) IDE (Eclipse や IntelliJ など) から起動するか、インストーラーを使用してインストールした後に (マーケットやブラウザーから、またはファイル ブラウザーで APK をクリックして) アプリを起動したと仮定します。その場合、これは Android の既知のバグです ( http://code.google.com/p/android/issues/detail?id=26658を参照)。多くの人がこの問題を追って何日も苦労してきました :-(

この問題の簡単な回避策は、http://code.google.com/p/android/issues/detail?id=2373#c21にあります。

これが問題であることを確認するには、IDE またはインストーラーから起動しないでください。アプリをインストールして、利用可能なアプリケーションのリストから起動するだけです。

このバグは、Android のすべてのバージョンのすべてのデバイスに存在します (少なくとも ICS まで、JellyBean ではまだテストされていません)。すべてがエミュレーターで正常に機能するため、エミュレーターの動作を実際のデバイスの動作の指標として使用することはできません。

于 2012-07-04T16:23:57.837 に答える
0

私が知る限り、ここで ICS に異なる動作はないはずです。私が考えることができる唯一のことは、アクティビティを破棄するための新しい開発者オプションです。あなたが説明していることから、あなたはそれをオンにしているようです。

すぐに活動を破壊する

アクティビティが停止するとすぐに破棄するようにシステムに指示します (Android がメモリを再利用する必要があるかのように)。これは、強制するのが難しい onSaveInstanceState(Bundle) / onCreate(android.os.Bundle) コード パスをテストするのに非常に役立ちます。このオプションを選択すると、状態が保存されないため、アプリケーションで多くの問題が明らかになる可能性があります。アクティビティの状態の保存について詳しくは、アクティビティのドキュメントを参照してください。

http://developer.android.com/guide/developing/debugging/debugging-devtools.html

編集:しかし、これは以下の引用を説明していません.

ICS では動作が異なります。これにより、新しいアクティビティ A が開始され、A の [戻る] ボタンをクリックすると B に戻ります。

于 2012-06-13T18:15:10.310 に答える