2

私のアプリケーションでは、アプリケーションがバックグラウンドになるか、同じアプリケーションの別のアクティビティに切り替わるかを検出する必要があります... onPause メソッドを使用する必要があることはわかっています...しかし、2 つのケースをどのように区別できますか?

4

2 に答える 2

8
private static boolean isApplicationGoingToBackground(final Context context) {

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
                return true;
            }
        }

        return false;
    }

更新:getRunningTasksは、正確であることが保証されていないことが宣言されています。

onStopを呼び出します。onStopは、画面を引き継ぐもののonStartの後に呼び出されます-同じapkパッケージ内のアクティビティである場合、バックグラウンドには入りません。これには、GET_TASKS権限が必要です。

または、サービスにバインドしてonStart&unbind onStop-すべてのアクティビティが停止すると、サービスはonDestroyedになります(または、onDestroyedが呼び出されることに依存したくない場合は、バインドとアンバインドを追跡します-呼び出されない可能性があります)。

于 2011-12-02T15:04:26.563 に答える
0

バックグラウンドまたはフォアグラウンドでアプリのステータスを取得する直接的な方法はありませんが、私でさえこの問題に直面し、onWindowFocusChanged と onStop で解決策を見つけました。詳細: http://vardhan-justlikethat.blogspot.in/2013/05/android-solution-to-detect-when-android.html

于 2013-05-31T17:50:41.630 に答える