0

ユーザーが実行中のプロセスを強制終了してアプリケーションを終了できるようにする単純なタスクマネージャーに取り組んでいます。以下を使用して実行中のプロセスリストを取得しています:

List<RunningAppProcessInfo> procInfo = activityManager.getRunningAppProcesses();

ボタンを1回クリックするだけで、重要または本質的ではない実行中のすべてのプロセスを強制終了したいと思います。このために、私は使用しています:

ArrayList<String> packages = new ArrayList<String>();
for (int i = 0; i < procInfo.size(); i++) {
    String process = procInfo.get(i).processName;
    if (!packages.contains(process)) {
            packages.add(process);
    }
}

これにより、実行中のすべてのプロセスの名前が取得されます。重要度コードを使用して、何らかの方法でプロセスをフィルタリングする必要があります。

int importance = procInfo.get(i).importance

しかし、私は本当に方法がわかりません。何を実行し続ける必要があり、何を安全に殺すことができますか?私は使用しています

applicationManager.killBackgroundProcesses(process);

私のプロセスを殺すために。私の次の質問は、これがプロセスを殺すための最良の方法ですか?このようにして、すべてのプロセスが強制終了されたアプリケーションの1つを再度開くと、メインアクティビティではなく、離れた場所にいることに気付くため、アプリケーションが終了したことはないと思います。そのすべてのプロセスが殺されました。また、私はそのアプリケーションを非常に荒涼とした状態で見つけました(ImageViewsとButtonsが欠落しており、TextViewsは本来あるべき場所にありません)。このアプリケーションも自分で作成したものであり、通常は完全に正常に動作することに注意してください。

私の最後の質問は、プロセスの強制終了に関するこの問題が解決されたら、選択したアプリケーションも終了したいということです。実行中のアプリケーションのリストを取得するにはどうすればよいですか?実行中のプロセスのリストを取得し、どういうわけかそのリストからアプリケーションを取得することを考えていました。その後、すべてのプロセスを強制終了して、選択したアプリケーションを終了します。しかし、すべてのプロセスを強制終了したときに明らかに機能しなかったため、これが最善の方法だとは思いません。

返信ありがとうございます!

4

1 に答える 1

4

Androidでアプリを強制終了することは、通常、悪い考えと見なされます。これは、AndroidOSがすべてのタスク管理を処理するように設計されているためです。通常、アイテムがAndroid OSで実行されていると表示されている場合、リソースを消費していません。システムがより多くのリソースを必要とする場合、アプリケーションは適切に終了します。アプリケーションが適切に閉じられていない場合、つまりタスクキラーによって閉じられていない場合、多くの悪い副作用が発生する可能性があります。

また、アプリが「実行中」であるからといって、プロセスが実行されているとは限りません。ActivityManagerのドキュメントを見ると、これが示されています。

システムで現在「実行中」の特定のタスクについて取得できる情報。実行中のタスクは、特定のタスクが実際にアクティブに実行されているプロセスを持っていることを意味するものではないことに注意してください。これは単に、ユーザーがアクセスして閉じなかったことを意味しますが、現在、システムはプロセスを強制終了し、ユーザーが戻ったときに再起動するために最後の状態を保持しているだけである可能性があります

killBackgroundProcesses()は、Android OSのように(より多くのメモリが必要な場合に)プロセスを強制終了します。したがって、システムがより多くのリソースを必要としたために強制終了されたと見なされるため、最後の状態を保持している可能性があります。したがって、システムは、ユーザーがアプリケーションに戻りたいと思う可能性があると信じるようになります(なぜそれが最後の状態を維持するのか)。

とにかく、上記を読み、それでもタスクキラーを書きたいと思った後は、オープンソースのタスクキラーをチェックすることが有益であることがわかるかもしれません。コードはここで見ることができます:http ://code.google.com/p/freetaskmanager/source/browse/

于 2012-05-10T07:08:48.970 に答える