2012-06-19 6 views
32

私は2つのアプリケーションを持っています.App-BはApp-Aを起動します。ユーザーがApp App AからApp Bを起動した場合、App-AでFinishを呼び出しても問題はありません。Intent.FLAG_ACTIVITY_CLEAR_TASKの代わりに

ユーザーがアプリケーションドロワーまたは長押しのホームボタンからApp Bにまっすぐ進むと、すべてのエキストラを適用する前にまずアプリケーションAのタスクをクリアする以下を実装します。これは望ましい影響を持ちますが、API 11でのみ機能します.APIの新しいタスクは変更されず、追加のputExtraは効果がありません。 FLAG_ACTIVITY_CLEAR_TASKの代替手段はありますか? APIの場合< = 10?

 Intent i = new Intent("com.App-A"); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 

ジェイソン

+2

FLAG_ACTIVITY_CLEAR_TOP – pawelzieba

+0

スタックが既に存在する場合はクリアしません..... –

+0

実際には2つの異なるアプリケーションを意味していますか?同じアプリケーション内で2つのアクティビティについて話していますか?マニフェストの関連部分を投稿すると、より多くの情報を提供できます。 –

答えて

0

おかげで私はまだ問題を理解する多くの問題を抱えているが、あなたはそれを修正する手助けしたいと思います。コメントは600文字しか許されていないので、フォーマットはうまくいきませんので、代わりに答えを作成します。なぜなら、私たちは一緒に解決することができると確信しているからです。

問題を再現したいと考えています。これを行うには、私は2つのアプリケーションを作成しました:AppAAppB。 AppAにはActivityAという1つのアクティビティがあり、AppBにはActivityBという1つのアクティビティがあります。 ActivityAActivityBの両方がandroid:launchMode="singleTask"です。

ActivityAは、このようなAppBをして仕上げを起動し、その上にボタンがあります:

Intent intent = new Intent("de.sharpmind.example.AppA"); 
    intent.putExtra("extra", "launched from AppB"); 
    startActivity(intent); 

Iとして、このすべての作品:

Intent intent = new Intent("de.sharpmind.example.AppB"); 
    intent.putExtra("extra", "launched from AppA"); 
    startActivity(intent); 
    finish(); 

ActivityBはこのようAppAのを起動し、その上にボタンがありますそれを期待する。 AppAとAppBは異なるタスクで動作します。各アプリケーションのonCreate()メソッドに「余分な」が正しく表示されます。

あなたの問題について詳しく教えてください。問題を正確に再現するにはどうすればよいですか?

より低いAPIでは、APP-Aの新しいタスクは変更されず、putExtraは機能しません。

それはどういう意味ですか?あなたはどこに余分なものを置いていますか?どこにいるのですか?何が起こると思いますか?

また、AppBのとは何ですか?

また、この問題が発生した場合、AppAのタスクスタックには他のアクティビティがありますか?

元の質問またはコメントに詳細を入力してください。

0

FLAG_ACTIVITY_CLEAR_TASKを使用すると、バックスタックがクリアされます。 正しく理解していれば、これはあなたが望む動作です。

マニフェストにsingleTaskの代わりにsingleInstanceを使用すると、これが実行されます。

コメントには、それはsingleTaskである必要があります。私はこれが特定の状況でバックスタックが必要なためだと仮定しています。

は変更できませんので、FLAG_ACTIVITY_CLEAR_TASKはAPI < = 10には使用できませんので、2つの同一のアクティビティを作成する必要があります。

launchMode=singleTaskで1つ、launchMode=singleInstanceで1つ。

アプリの引き出しから起動したときに明確なスタックを取得するためにsingleInstanceを使用して1にこれを追加します。

<category android:name="android.intent.category.LAUNCHER" /> 
1

、私はあなたが求めているものを理解するのに間違っているかもしれないが、それはあなたがBを起動したときということですあなたはAが殺されることを望みますか?で

、マニフェストにアクティビティタグにこれを追加します。これは、アクティビティは、すぐにそれがフォーカスを失ったように、メモリから削除されることになります

android:noHistory=true 

2

これは新しいIntentCompatは、その上で役立ってきたはずですが、どうやらフラグはIntentCompatを使用するにはより低い11

APIの場合は無視され、正しく

i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY | 
       Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
+0

これはAPI 10では機能しません。 – Mahm00d

13

に動作しますと、次の操作を行います

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 
+0

「このフラグはAPI 11以降をサポートするデバイスでのみ適用されます」 [ドキュメントから](http://developer.android.com/reference/android/support/v4/content/IntentCompat.html#FLAG_ACTIVITY_CLEAR_TASK) – kabuko

+1

@ kabuko私は完全にそれを見落としました。しかし、それではポイント!私たちがif(api> x)をやっているのは無理だと思いますが、それでもなお役に立ちません。 – Warpzit