だから私は自分のアクティビティを持っており、「終了」ボタンを押すとActivity.finish()を呼び出します。これにより、アプリケーションが効果的に閉じられます。
問題:私のアプリケーションのDalvikプロセスは、バックグラウンドでゾンビとしてまだぶらぶらしています。他のアプリケーションも同じように、これは正常なようです。 hello-worldの例でさえ、メモリ内でぶらぶらしています。
私はこれで生きることができましたが、残念ながらこの振る舞いは私のアプリケーションの開発を苦痛にします。アクティビティにリモートサービスが接続されていますが、このサービスはアクティビティがアンロードされるまでアンロードされません(前述のとおり、アンロードされません)。
正当な理由もなく、すべてがどういうわけか生き続けています。
どうすれば本当に自分のアクティビティをメモリから削除できますか?
Activity.finish_and_kill_my_process_please()呼び出しなどのようなものを探しています。
だから私は自分のアクティビティを持っており、「終了」ボタンを押すとActivity.finish()を呼び出します。これにより、アプリケーションが効果的に閉じられます。
私のアプリケーションのDalvikプロセスは、まだバックグラウンドでゾンビとしてぶらぶらしています。
このプロセスは、Androidで再利用できるように、キャッシュに保持されます。あなたはそれを安全に無視することができます。
アクティビティにリモートサービスが接続されていますが、このサービスはアクティビティがアンロードされるまでアンロードされません(前述のとおり、アンロードされません)。
startService()
を呼び出してstopService()
を呼び出せなかったり、bindService()
を呼び出してunbindService()
を呼び出せなかったりするなど、アプリケーションにバグがある可能性があります。
Android.os.Process.killProcess(Android.os.Process.myPid());
public void onDestroy() {
super.onDestroy();
Android.os.Process.killProcess(Android.os.Process.myPid());
}
killBackgroundProcesses
メソッドを使用してみてください:
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("name.of.your.package");
KILL_BACKGROUND_PROCESSES
権限をAndroidManifest.xml
ファイルに追加する必要があります。
プロセスを強制終了することで、アプリケーションを完全に停止できます。戻るボタンを押す最後の画面から、次の方法でプロセスを強制終了できます。
public void onBackPressed() {
super.onBackPressed();
int pid = Android.os.Process.myPid();
Android.os.Process.killProcess(pid); }
さて、アクティビティだけでなく、終了したいアプリケーションもあれば、
System.exit(0)
人々はそれが非推奨または悪い例だと言います、しかし、まあそれは純粋なJavaであり、機能します...
ActivityManagerを使用することで、他のアプリケーションも閉じることができます。
private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");
上記のコードを使用するには、マニフェストファイルにAndroid.permission.RESTART_PACKAGE
権限が必要です。
Java側のSystem.exit(0)と同様に、C/C++側のexit(0)を呼び出すonDestroy中にネイティブメソッドを呼び出すこともできます。これにより、完全に終了するlib。それは私のために働いています!
System.exit()は、すべてのネイティブライブラリ、サービスなどを含む仮想マシン全体を即座にアンロードします。