1つ目
AQUOS Xx 304SH (Android 4.4.2) にアプリをインストールして動作確認をしていたところ、GridViewをスクロールしている途中にソフトキーのバックボタンが効かなくなり、最終的に「問題が発生したため、◯◯を終了します。」のダイアログが表示されること無くアプリが強制終了するという事案が発生しました。
今まで動作確認中にこのようにはなったことがなく、メモリの使用状態が上がってきた頃にアプリが強制終了させられたため実機側に問題があると思い一度再起動してみたところ、上記の現象は発生しなくなりました。
デバッグに使用していた端末ですが1,000時間以上は稼働していたと思うので、しばらく電源を切っていないと思ったら再起動することをお勧めします。
手元に AQUOS Xx 304SH と AQUOS CRYSTAL 305SH (Android 4.4.2) があるのですが、アプリを終了した後プログレスバーが表示され、なかなかホーム画面に戻らなくなるという予兆があったので、端末の動作が遅くなってきたときが電源を切ってリセットするタイミングだと思います。
2つ目
-
onCreate()
で Fragment をadd()
する Activity を作成する - 設定 > 開発者向けオプション > アクティビティを保持しない をONにして Activity の遷移 OR ホームボタンタップでアプリをバックグラウンドにする アプリをフォアグラウンドに戻す を繰り返す
- Activity は破棄されるが Fragment は生きているという状態になる
- 破棄された Activity に戻ると
onCreate()
が再度呼ばれ Fragment がadd()
される - さらに Activity の遷移を繰り返すと同じ Fragment が2、3、4...個と生成されていく
- 最終的にメモリの限界が来てアプリが落ちる
ということがあるので Fragment が存在している場合は何もしないようにするという対応が必要になります。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getSupportFragmentManager().findFragmentByTag("FragmentTag") == null) {
getSupportFragmentManager().beginTransaction().add(R.id.activity_fragment_container, new Fragment(), "FragmentTag").commit();
}
}