随所のAndroidアプリ開発ブログで、
moveTaskToBack(true);
と書いてやればアプリを終了できると書いてあるのだけれど、
これで実装しても、ユーザからは「アプリを終了できません」「常駐させないでください」
というクレームがバンバン飛んで来る。
残るはプロセスを切ってやるか、System.exit()してやるかなんだけど、
こっちも推奨されないコードは書きたくない。
で、やっとこ見つけた方法が、
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
で、自パッケージを殺してやることなんだけど、
2.1以降にrestartPackage()がラップしているkillBackgroundProcesses()の仕様が変わり、
プロセスがフォアグラウンドの時には終了することができないようになったらしいので、
期待できないことが解った。
(参考)http://frontallobe.kentauros.net/home/android
仕様上どうしようもないことを、どうユーザさんに解って貰えばいいのだろうか・・・
追記:
返信削除結局、プロセスを落とすことにした。
クラス変数のフラグを持たせて、
アプリを落としたい契機でそいつをTrueにする。
その後、moveToBack(true)してバックグラウンドに移行させ、
onPause()の中でフラグ=TrueならkillProcess()してやる。
ただし、onPause()やonDestroy()で
やらなければならない作業を考慮した上で行う。
もう一つ、プロセスを落としてやっても、
返信削除ActivityManager#getRunningTasks()で取得できる
起動中のアプリ一覧には残ってしまう(場合がある?)ことが解った。
解決策はよく解らないのだれど、singleTaskの場合、
BaseとなるActivityが残っているとダメみたい?