2015-11-03 43 views
12

Androidの場合、現在のActivityスタックをクリアして新しいActivityを起動したい場合(例えば、アプリからログアウトしてログにActivityを起動する)、2つのアプローチがあるようです。Activity.finishAffinity()vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

ターゲットAPIレベルが16を超えると、それに比べて利点はありますか?

1)完了アフィニティ

ActivityからfinishAffinity()を呼び出します。 Activity.finishAffinity

2)インテントフラグ

Intent intent = new Intent(this, LoginActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

finishAffinity()アプローチは> = API 16

Intentフラグアプローチに適しているが> = API 11

に適しています明らかにするために、現在のActivityスタックをクリアする目的で、両方のアプローチが同様に機能するように見えます。私の質問は、人々が経験したことに問題があることであり、それゆえに、もう一方を選択する理由があるということですか?

答えて

10

のスタックをクリアし、この

Intent.FLAG_ACTIVITY_CLEAR_TOP 

を試してみて、違いはありませんが、GenyMotion上でこれをテストするわずかな視覚的な違いがあるように見えます。ウェブキャストを参照してください:https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

どのように一貫性があるかを確認するには、さまざまなデバイスでそれを試す必要があります。

私は主観的に、finishAffinity()と言っています。ただし、< SDK 16をサポートする必要がある場合は、実際に選択する必要はありません。

+0

あなたが言及している遅延(フリッカー)は、最初にfinishAffinity()に質問したものです。 IIRCでは、特にサムスンデバイスの中には、finishAffinity()を使用したときに非常に顕著なちらつきがありましたが、テストするデバイスがなくなりました。 –

+0

この場合は、ビデオごとにフリッカーが発生したインテントバージョンでした。 – brindy

+0

実際、私はそれを(ビデオに基づいて)ちらつきと呼ぶのか分からない。視覚的に何が起こるかについては、まったく異なるものがあります。 finishAffinityは上に表示されているように見えますが、インテントバージョンはスタックの一番上にある別のものを明らかにしているように見えます。 – brindy

0

インテントフラグを使用する必要があります。

あなたは大きな活動の積み重ねを持っている場合は、それぞれからすべてを完了するために電話をしますか?

インテントを呼び出す方がはるかに簡単で簡単です。

これが役に立ちます。

+0

私の質問に記載されている両方のアプローチの目的は、個別に各1上の仕上がりを()を呼び出すことなく、現在のスタック内のすべての活動を終了することです。私が見る限り、どちらのアプローチもこれを達成しています。 –

0

することは、以前の活動機能的