3

を使用してonResume()、アクティビティがフォアグラウンドかどうかを確認できます。私の問題はonResume()、別のアクティビティからこのアクティビティに来ても、毎回火事になることです。

したがって、私の主な問題は、ホームボタンでアプリを最小化する場合、アプリがフォアグラウンドになったときに各アクティビティでいくつかのコードを実行したいが、使用していないことonResume()です。

このような答えを見つけましたアプリがフォアグラウンドで実行されている場合、BroadcastReceiver で知るにはどうすればよいですか? しかし、アプリが表示されているときにトリガーを取得するために、このレシーバーをandroid menifestに登録する方法がわかりません。

この解決策またはコード スニペットを克服するにはどうすればよいか、いくつかのヒントを教えてください。前もって感謝します :)

4

2 に答える 2

2

やりたいことの 1 つは、アプリケーションで onStart/onStop が呼び出された回数を数えることです。これは、アプリケーションの内部または外部からアクティビティに移行したかどうかを判断するのに役立ちます。

Applicationを拡張してから、そのクラス内でActivityLifecycleCallbacksを作成/登録する必要があります。また、AndroidManifest で作成した新しい Application クラスを必ず指定してください。

ここでの秘訣は、onActivityStarted/onActivityStopped にカウント変数を保持して、Activity がアプリケーションの内部または外部からナビゲートされたかどうかを判断することです。

アプリに FirstActivity と SecondActivity の 2 つのアクティビティがあるとします。

FirstActivity から SecondActivity に移動すると、ライフサイクル コールは FirstActivity.onStart() > SecondActivity.onStart() の順序で発生し、カウントは 1 になります。

アプリケーションの外部からナビゲートすると、FirstActivity.onStart() しか表示されないため、カウントは 0 です。これはすべて、super.onStart() が呼び出された後にカウントを確認することを前提としています。

そのため、カウントを 0/1 と照合することで、アクティビティがアプリケーション内から起動されたのか、アプリケーション外から起動されたのかがわかります。

/**
 * Extending the application class lets you use ActivityLifecycleCallbacks to
 * keep track of all lifecycle callbacks in your application.
 */
public class MyApplication extends Application implements ActivityLifecycleCallbacks {
    private int count = 0;

    //Register activity lifecycle callbacks in onCreate
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(this);
    }

    void onActivityStarted(Activity activity) {
        count++;
    }

    void onActivityStopped(Activity activity) {
        count--;
    }

    /**
     * Use this method in your Activities to test if the activity was
     * transitioned to from outside the application.
     * 
     * If you call this method in Activity.onResume(), then count should be
     * compared to 0. If you call this method in Activity.onStart() but
     * *before* calling super.onStart(), then count should be compared to 0.
     * 
     * However, if you call this method after super.onStart(), then count
     * should be compared to 1.
     */
    public boolean cameFromOutsideApplication() {
        return count == 0;
    }

    //Don't need to use the rest of the activity lifecycle callbacks
    void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    }
    void onActivityDestroyed(Activity activity) {
    }
    void onActivityPaused(Activity activity) {
    }
    void onActivityResumed(Activity activity) {
    }
    void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    }
}

ここでもさらに情報が得られるかもしれませんが、使いやすい ActivityLifecycleCallbacks は使用されていません。

于 2015-09-12T06:56:52.543 に答える
-2

受信者を登録する場合は、次のコードを使用できます。

<receiver 
    android:name="com.package.name.ReceiverClassName"
    android:enabled="true" >
</receiver>
于 2015-09-11T20:42:52.310 に答える