2017-01-26 24 views
0

私のアプリではいくつかのアクティビティに問題があります。ゲーム自体には2つのアクティビティがあります - Player1Players2です。この活動では、他のアプリからのポップアップが(例えばのWhatsApp)が表示された場合、活動は終了し、最後のアクティビティは、(例えば、私のアプリでは、活動がChooseLevelまたはChooseGameTypeと呼ばれるバックアップ開きます。他のアプリからのポップアップが表示されたときにAndroidアプリのアクティビティが停止する

私はそれを持っていると思いますonStopとの方法とは、これらのアクティビティに対してfinish();と呼んでいます。ポップアップが表示されてもアクティビティが終了しないようにするには、どちらを変更する必要がありますか?画面に表示されますが、ポップアップが表示されたときに表示されます。

+0

コード例やスタックトレースはありますか? –

+1

なぜあなたは 'onPause'や' onStop'の間にアクティビティを終了していますか?ポップアップで 'onPause'が呼び出され、OSが自分の' onStop'と 'finish'であなたのアプリを殺すなら、とにかく実行されます。 –

+0

これらのコールバックのいずれかでfinishを呼び出す必要はありません。 – DeeV

答えて

1

onPause()onStop()の間には、きちんとした重要な違いがあります。 activity docs

onPause()から:システムは前の活動を再開開始しようとしているときに呼び出され

。保存されていない変更を永続データにコミットしたり、CPUなどを消費する可能性があるアニメーションやその他の処理を停止するために使用されます。このメソッドの実装は、このメソッドが戻るまで次のアクティビティが再開されないため、 アクティビティが前面に戻る場合はonResume()、ユーザが見えなくなる場合はonStop()のいずれかを続けます。

onStop():別のアクティビティが再開されており、これを覆っているため活性が、もはやユーザに表示されたときに呼び出さない

。これは、新しいアクティビティが開始されているか、既存のアクティビティがこのアクティビティの前に持ち込まれているか、またはこのアクティビティが破棄されているために発生する可能性があります。 このアクティビティがユーザとやりとりする場合は、onRestart()、このアクティビティが終了する場合はonDestroy()のいずれかが続きます。

このように、アプリを続行する方法を決定する2つのシナリオがあります。この場合、別のActivityがアプリを完全にカバーしていないときにfinish()に電話をかけたくない場合は、finish()コールをonPause()で削除する必要があります。

0

エラーは常にonPause()である必要があります。アプリがフォアグラウンドにもうなくなったときのAndroidそのため、WhatsAppのような別のアプリからのアクティビティが表示されている場合は、onPause()が呼び出されています。だからあなたのアプリを閉じることを避けるためにそこからfinish();コールを削除します。

0

問題はonPause()メソッドにあり、finish()と呼びます。別のアプリケーションが表示されているときは、あなたのアプリが実際にポーズ状態にあるため、onPause()が確実に呼び出されます。既に他のユーザーが指摘しているように、finish()に電話をかけないでください。また、onStop()メソッドでfinish()と呼ぶのは悪い習慣でも無意味です。

関連する問題