1

アプリがバックグラウンド モードで実行されているかどうかを確認したい。

問題は、多くのアクティビティ (リスト アクティビティ、マップ アクティビティなど) があることです。最初に、ライフサイクルの再開および一時停止(またはonUserLeaveHint)メソッドで静的ブール値をtrueまたはfalseに設定し、この方法で作業しようとしました。しかし、あるアクティビティから別のアクティビティに移動すると、前のアクティビティが一時停止するため、これは明らかに機能しません。

getRunningTasks()また、デバッグ目的でのみ使用する必要があることをスタックオーバーフローで読みました。大規模な調査を行いましたが、解決策が見つかりません。私がやりたいのは、アプリがバックグラウンドで実行されているかどうかを検出できるようにすることだけです。誰かが私に方法を提案したり、どうすればそれを行うことができるかについて何か考えを表明したりできますか?

4

3 に答える 3

2

同じメカニズム (ブール属性) を試すことができますが、アクティビティ側ではなくアプリケーション側で試すことができます。を拡張するクラスを作成し、Applicationの下のマニフェスト ファイルで宣言します<application android:name=YourClassApp>

編集:バックグラウンド処理を意図していないことを知ってactivitiesいると思います.そうでない場合はServices.

于 2013-01-25T13:01:56.530 に答える
1

これが役立つかどうかはわかりませんが、使用できます

getApplicaton().registerActivityLifecycleCallbacks(あなたのクラス);

アクティビティが FG にどのように表示されるかを俯瞰するため。(古いソフトウェアの場合は、これを使用できます)


アプリケーションにサービスがある場合、静的変数にアクセスする静的な get/set を持つことができます。ただし、アクティビティではこれを行わないでください。メモリ リークが発生します。

しかし、現実的に言えば、アプリケーションが実行されているかどうかをきちんと追跡する方法はありません。

于 2013-01-25T13:48:24.100 に答える
0

Firebase プッシュ メッセージングの既定の動作 (バックグラウンドでのみ通知を表示する) を上書きするときに同じ問題が発生しました。.class ファイル com.google.firebase.messaging.zzb:53 (firebase-messaging :19.0.1) getRunningAppProcesses に表示されます。FireBase は Google 自身によって作成されていることに注意してください。そのため、かなり節約できると思います。クリーンアップされたバージョン:

List<ActivityManager.RunningAppProcessInfo> runningApps;            
boolean isInForeground =false;
        if ((runningApps = ((ActivityManager)this.getApplication().getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses()) != null) {
            Iterator runningApp = runningApps.iterator();
            int myPid = Process.myPid();
            while(runningApp.hasNext()) {
                ActivityManager.RunningAppProcessInfo processInfo;
                if ((processInfo = (ActivityManager.RunningAppProcessInfo)runningApp.next()).pid == myPid) {
                    isInForeground = processInfo.importance == 100;
                    break;
                }
            }
        }
于 2019-08-01T14:42:33.590 に答える