諸事情により,Androidでアプリの終了時にプロセスをkillするという実装を行いました.そのコード例です
Androidアプリ終了時にプロセスを終了する
Androidアプリの標準的な実装としては,開発者はActivityをfinishすればよく,
それ以降はOSに任せるのだと思います.
ただ困ったことに,使っているブラックボックスのライブラリがメモリリークを起こしていて,
終了時にプロセスを殺さないとメモリ使用量が増え続けるという事態が発生したため,
やむなく終了時にプロセスをkillするという実装を行いました.
そのときの実装例です.
Activityクラス
package
com.kamoland.killtest;
import
android.app.Activity;
import
android.os.Bundle;
public
class
KilltestActivity extends
Activity {
public
boolean
isShutdownProcess;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(new
KillTestView(this
));
}
@Override
protected
void
onStop() {
if
(isShutdownProcess) {
// プロセスをkillする
android.os.Process.killProcess(android.os.Process.myPid());
}
super
.onStop();
}
}
Viewクラス
package
com.kamoland.killtest;
import
android.content.Context;
import
android.view.KeyEvent;
import
android.view.View;
public
class
KillTestView extends
View {
public
KillTestView(Context context) {
super
(context);
// キーイベントを受け取れるように
setFocusable(true
);
setFocusableInTouchMode(true
);
}
@Override
public
boolean
onKeyDown(int
keyCode, KeyEvent event) {
// バックキーで終了する
if
(keyCode == KeyEvent.KEYCODE_BACK) {
KilltestActivity act = (KilltestActivity)getContext();
// アプリ終了を示すフラグ
act.isShutdownProcess = true
;
act.finish();
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}
}
killしてしまうというのは標準的なやり方ではないと思いますので,
くれぐれも自己責任でお願いします.
一応,
- 1.5のエミュレータ
- 1.6 (HT-03A)
- 2.3.4 (Xperia arc)
- 3.2 (XOOM)
- 4.0 (Galaxy Nexus)
での動作確認はしていますが...