50

これらのリンクに記載されている問題に正確に直面しています:

http://code.google.com/p/android/issues/detail?id=2373

http://groups.google.com/group/android-developers/browse_thread/thread/77aedf6c7daea2ae/da073056831fd8f3?#da073056831fd8f3

http://groups.google.com/group/android-developers/browse_thread/thread/2d88391190be3303?tvc=2

LAUNCHER インテントと MAIN インテントのみを含む単純なルート アクティビティがあります。マニフェストにフラグや余分なものがまったくない別のアクティビティを開始します。

アプリ (ルート アクティビティ) を起動し、そこから 2 番目のアクティビティを開始します。ホームボタンを押すと、タスクはバックグラウンドに移動します。(ランチャーから、または最近のアプリの場合はホーム ボタンを押したままにして) アプリを再度起動すると、既存のスタックの上でルート アクティビティの新しいインスタンスが開始されます。

戻るボタンを押すと、新しい「ルート」アクティビティが閉じて、古い 2 番目のアクティビティが表示されます。つまり、タスクをフォアグラウンドに移動するのではなく、同じタスクでルート アクティビティを起動します。

これに対抗するために、ルート アクティビティの起動モードをsingleTaskにしました。ホームを押してアプリを再度起動すると、古いルート タスクの上のアクティビティがクリアされ、古いルート タスク全体が前面に移動するのではなく、古いルート タスクが前面に表示されます。古いルート タスクはまだアプリケーションの状態を保持していることに注意してください。つまり、新しいインスタンスではなく、上位のアクティビティが強制終了されたことを意味します。

市場からダウンロードした他のアプリケーションでも発生します。手動インストール方法は私には効果がありません。それでも同じ方法で起動します。

4

5 に答える 5

64
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
        // Activity was brought to front and not created, 
        // Thus finishing this will get us to the last viewed activity 
        finish(); 
        return; 
    } 

    // Regular activity creation code... 
} 
于 2012-05-15T10:17:42.850 に答える
25

これは、アプリの起動に使用されるインテントが異なるためです。Eclipse は、アクションもカテゴリーもないインテントを使用してアプリを開始します。ランチャーは、android.intent.action.MAIN アクションと android.intent.category.LAUNCHER カテゴリのインテントを使用してアプリを起動します。インストーラーは、android.intent.action.MAIN アクションとカテゴリなしでアプリを起動します。

バグを提出した人は誰でも、おそらく Eclipse プラグインの機能強化の要求として、Eclipse がランチャーのふりをして、ランチャーと同じインテントを使用してアプリを起動できるようにしたいと考えているはずです。

于 2010-02-17T18:50:56.853 に答える
6

解決策は次のとおりです。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) {
        finish();
        return;
    }

 Your code....
}

編集: 新しいインテントと通知に問題がありました。以前のソリューションは、通知とインテントでは機能しません...

于 2015-02-03T12:26:33.180 に答える