2011年3月10日木曜日

アプリのタスク、終了できません!(CV青島

随所の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

仕様上どうしようもないことを、どうユーザさんに解って貰えばいいのだろうか・・・

2 コメント:

  1. 追記:

    結局、プロセスを落とすことにした。

    クラス変数のフラグを持たせて、
    アプリを落としたい契機でそいつをTrueにする。
    その後、moveToBack(true)してバックグラウンドに移行させ、
    onPause()の中でフラグ=TrueならkillProcess()してやる。

    ただし、onPause()やonDestroy()で
    やらなければならない作業を考慮した上で行う。

    返信削除
  2. もう一つ、プロセスを落としてやっても、
    ActivityManager#getRunningTasks()で取得できる
    起動中のアプリ一覧には残ってしまう(場合がある?)ことが解った。

    解決策はよく解らないのだれど、singleTaskの場合、
    BaseとなるActivityが残っているとダメみたい?

    返信削除