私のアプリは、彼らがホームボタンを押したときに、ユーザーの葉が現在の活動、例えば、(バックグラウンドに入る)Firebase文書または電源ボタンを削除する必要があります。次のコードは、ホームを押したときに罰金を動作しますが、電源ボタンが押されたときに何もしません。
protected void onPause() {
super.onPause();
// Remove player from players list.
if (mPlayerDocRef != null) mPlayerDocRef.delete();
if (mAuthStateListener != null) mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
}
)(削除は非同期動作であるので、私は次のようにコールバックを追加してみました:
if (mPlayerDocRef != null)
mPlayerDocRef.delete()
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
if (mAuthStateListener != null) mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error deleting document", e);
}
});
しかし、コールバックが呼び出されることはありません飽きません。問題が何であるか上の任意のアイデア?
UPDATE:私は本当のサムスンギャラクシータブA(アンドロイド9)とサムスン注8(アンドロイド6.0.1)でテストしても問題が唯一の画素2(Androidの10)と、そこにありません。OSのバグである可能性があります。
onPause()
システムは、(それが常に活動が破壊されているという意味ではありませんが)、ユーザーがあなたの活動を残していることを最初の兆候として、このメソッドを呼び出します。(ユーザがマルチウィンドウ・モードである場合、それはまだ目に見えるかもしれないが)、それは活性がフォアグラウンドでなくなったことを示していません。一時停止または継続するべきではない(またはほどほどに継続すべきである)の活動が一時停止状態にあるときの操作を調整するためにonPause()メソッドを使用して、あなたはすぐに再開することを期待しています。
電話Iの推測が技術的にそれはすぐに再開されることはありませんでしたオフ。私はいくつかの携帯電話は、アニメーションを「オフ」しており、それらの例には、あなたがonPauseを取得します知っています。
しかし、また、onStopまたはonDestroyを試してください。
onStop()
あなたの活動は、もはやユーザーに表示されている場合は、停止状態に入っていないと、システムはonStop()コールバックを呼び出します。これは、新たに起動アクティビティが画面全体を覆っている場合、例えば、起こり得ます。アクティビティが終了ランニングを持っている、と、システムはまた、()onStop呼び出すことができますし、終了されようとしています。
上のドキュメントは、呼び出される保証はないと言うように私は以下について確信しています破壊します:
onDestroy()
アクティビティが破壊される前に、onDestroy()が呼び出されます。システムがあるためどちらか、このコールバックを呼び出します。
- 活性は、(完全に()活性に呼び出される仕上げに活性または起因を却下によりユーザに)仕上げされるか、または
- システムが一時的構成の変更に活性を破壊された(例えば、デバイスの回転又はマルチウィンドウモードなど)
また、シャットダウンイベントのブロードキャストレシーバーを登録することができます。
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN"/>
<action android:name="android.intent.action.QUICKBOOT_POWEROFF"/>
</intent-filter>
ACTION_SHUTDOWNためBroadcastReceiverの行動
で、プログラムもBroadcastReceiverを登録してみてくださいActivity.registerReceiver()
、あなたの活動にコールバックを取得しますそのように。