1

アプリケーションが(ユーザーまたはシステムによって)閉じられたときを見つける方法はありますか。つまり、ユーザーがアプリケーションランチャーアイコンを押すことによってのみアプリケーションを再起動できます。

プロセスの名前がgetRunningAppProcesses()から削除されたときに Android システムがインテントをブロードキャストする場合にのみ可能だと思います。

SO に関するすべての可能な Q&A を読みましたが、質問は ActivityLifecycle とは関係ありません。

4

2 に答える 2

4

一般に、ユーザーがアプリを「終了」するのを待つことは、次の理由から悪い考えです。

  • ユーザーが実際にアプリに存在することはなく、単にアクティビティ スタックに残しておいて、後で戻ってきます。
  • ユーザーは、アプリの再入力など、データベースの更新中に何かを行う可能性があります。
  • 非常にハックなソリューションがなければ、これを実際に検出することはできません。これはAPI の設計によるものです。このようなことを行う必要はないからです。

このため、アプリが「死ぬ」のを待つことに基づくソリューションは悪いものだと思います。代わりに、アプリケーションのセマンティクスを尊重するソリューションを考え出す必要があります。たとえば、コンテンツ プロバイダの 1 つにデータを入力している場合、一貫性を処理する必要があります (たとえば、アプリ内のフラグメント全体)。

于 2012-12-07T21:00:31.910 に答える
2

うーん..ファイルシステムの /proc を手動で監視して、関心のあるアプリケーションのプロセス ID が存在するかどうかを確認できます。

ターミナル ウィンドウから、次のことを試してください。例えば ​​:

> MYPID=(`adb shell ps | grep com.mydomain.myapp | awk '{print $2}'`)
> adb shell [ -d /proc/$MYPID ] && echo "PID $MYPID Exists"

com.mydomain.myappをアプリのパッケージ名に置き換えます

Android でプロセスを監視するために使用できるアプリがいくつかあります。http://code.google.com/p/android-os-monitor/をご覧ください

android-os-monitor プロジェクトは、JNI レイヤーを使用して /proc http://code.google.com/p/android-os-monitor/source/browse/OSMonitor/jni/process.c?repo=とのやり取りを実装し ます。オスモニター

http://code.google.com/p/android-os-monitor/source/browse/OSMonitor/src/com/eolwral/osmonitor/JNIInterface.java?repo=osmonitor

http://code.google.com/p/android-os-monitor/source/browse/OSMonitor/src/com/eolwral/osmonitor/processes/ProcessList.java?repo=osmonitor

于 2012-12-07T20:39:45.850 に答える