web-dev-qa-db-ja.com

自分のアクティビティを殺す方法-難しい方法

だから私は自分のアクティビティを持っており、「終了」ボタンを押すとActivity.finish()を呼び出します。これにより、アプリケーションが効果的に閉じられます。

問題:私のアプリケーションのDalvikプロセスは、バックグラウンドでゾンビとしてまだぶらぶらしています。他のアプリケーションも同じように、これは正常なようです。 hello-worldの例でさえ、メモリ内でぶらぶらしています。

私はこれで生きることができましたが、残念ながらこの振る舞いは私のアプリケーションの開発を苦痛にします。アクティビティにリモートサービスが接続されていますが、このサービスはアクティビティがアンロードされるまでアンロードされません(前述のとおり、アンロードされません)。

正当な理由もなく、すべてがどういうわけか生き続けています。

どうすれば本当に自分のアクティビティをメモリから削除できますか?

Activity.finish_and_kill_my_process_please()呼び出しなどのようなものを探しています。

17

だから私は自分のアクティビティを持っており、「終了」ボタンを押すとActivity.finish()を呼び出します。これにより、アプリケーションが効果的に閉じられます。

これをしないでください

私のアプリケーションのDalvikプロセスは、まだバックグラウンドでゾンビとしてぶらぶらしています。

このプロセスは、Androidで再利用できるように、キャッシュに保持されます。あなたはそれを安全に無視することができます。

アクティビティにリモートサービスが接続されていますが、このサービスはアクティビティがアンロードされるまでアンロードされません(前述のとおり、アンロードされません)。

startService()を呼び出してstopService()を呼び出せなかったり、bindService()を呼び出してunbindService()を呼び出せなかったりするなど、アプリケーションにバグがある可能性があります。

7
CommonsWare
  1. ボタンクリックでfinish();を呼び出す
  2. 次の行をonDestroyメソッドに追加します。

Android.os.Process.killProcess(Android.os.Process.myPid());

    public void onDestroy() {
        super.onDestroy();
        Android.os.Process.killProcess(Android.os.Process.myPid());
    }       
25
bdhac

killBackgroundProcesses メソッドを使用してみてください:

ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
activityManager.killBackgroundProcesses("name.of.your.package");

KILL_BACKGROUND_PROCESSES 権限をAndroidManifest.xmlファイルに追加する必要があります。

6
Cristian

プロセスを強制終了することで、アプリケーションを完全に停止できます。戻るボタンを押す最後の画面から、次の方法でプロセスを強制終了できます。

public void onBackPressed() {   
        super.onBackPressed();   
        int pid = Android.os.Process.myPid();
        Android.os.Process.killProcess(pid);    }
4
Midhun VP

さて、アクティビティだけでなく、終了したいアプリケーションもあれば、

System.exit(0)

人々はそれが非推奨または悪い例だと言います、しかし、まあそれは純粋なJavaであり、機能します...

3
Ahmet Ipkin

ActivityManagerを使用することで、他のアプリケーションも閉じることができます。

private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");

上記のコードを使用するには、マニフェストファイルにAndroid.permission.RESTART_PACKAGE権限が必要です。

0
Krishna Prasad

Java側のSystem.exit(0)と同様に、C/C++側のexit(0)を呼び出すonDestroy中にネイティブメソッドを呼び出すこともできます。これにより、完全に終了するlib。それは私のために働いています!

0
PolyMesh

System.exit()は、すべてのネイティブライブラリ、サービスなどを含む仮想マシン全体を即座にアンロードします。

0
Sergey Galin