諸事情により,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)

での動作確認はしていますが...


© 2024 KMIソフトウェア