program story

활동을 포 그라운드로 가져 오는 방법 (스택 맨 위)?

inputbox 2020. 10. 9. 11:09
반응형

활동을 포 그라운드로 가져 오는 방법 (스택 맨 위)?


Android에서는 ExampleActivity 활동을 정의했습니다.

내 응용 프로그램이 시작되었을 때이 A-Activity의 인스턴스가 생성되었습니다 A. 사용자가에서 버튼을 클릭하면 AB-Activity의 또 다른 인스턴스 인 B가 생성되었습니다. 이제 작업 스택은 BA이고 맨 위에 B가 있습니다. 그런 다음 사용자가 B의 버튼을 클릭하면 C-Activity의 또 다른 인스턴스가 생성됩니다. 이제 작업 스택은 CBA이며 맨 위에 C가 있습니다.

이제 사용자가 C의 버튼을 클릭하면 응용 프로그램이 A를 포 그라운드로 가져 오도록합니다. 즉, A가 작업 스택 인 ACB의 맨 위에 있도록합니다.

코드를 작성하면 어떻게됩니까?


이것을 시도해 볼 수 있습니다 FLAG_ACTIVITY_REORDER_TO_FRONT(문서는 당신이 원하는 것을 정확하게 설명합니다)


이 작업을 수행하는 가장 좋은 방법은 Android 홈 화면에서 사용하는 것과 동일한 인 텐트 인 앱 런처를 사용하는 것입니다.

예를 들면 :

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

이렇게하면 내 패키지에서 사용자가 가장 최근에 사용한 활동이 다시 맨 앞으로 돌아옵니다. 이 기능은 내 서비스의 PendingIntent를 사용하여 사용자를 내 앱으로 되돌릴 때 유용하다는 것을 알았습니다.


다음은이를 수행하는 방법에 대한 코드 예제입니다.

Intent intent = getIntent(getApplicationContext(), A.class)

이렇게하면 스택에 하나의 활동 인스턴스 만 있습니다.

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

FLAG_ACTIVITY_REORDER_TO_FRONT : Context.startActivity ()에 전달 된 인 텐트에 설정된 경우이 플래그는 시작된 활동이 이미 실행중인 경우 작업의 기록 스택 맨 앞으로 가져 오도록합니다.

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

Intent플래그 조합이 트릭을해야한다고 생각합니다. 특히, Intent.FLAG_ACTIVITY_CLEAR_TOP하고 Intent.FLAG_ACTIVITY_NEW_TASK.

을 호출하기 전에 이러한 플래그를 인 텐트에 추가하세요 startActvity.


i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

참고 homeactivity 실행 모드는 single_task 여야합니다.


일반적으로이 활동 관리 방법은 권장되지 않는다고 생각합니다. The Stack에서 두 단계 아래로 활동을 재 활성화하는 문제는이 활동이 종료되었을 가능성이 있다는 것입니다. 당신의 활동 상태를 기억하고 시작하기위한 나의 조언startActivity ()

이 페이지를 보셨을 것 같지만 편의를 위해이 링크


알림을 클릭 할 때 활동을 스택 맨 위로 가져 오려면 다음을 수행하여 FLAG_ACTIVITY_REORDER_TO_FRONT가 작동하도록해야합니다.

이에 대한 해결책은 알림이 트리거하는 브로드 캐스트 작업을 수신하는 브로드 캐스트 수신기를 만드는 것이 었습니다. 그래서 기본적으로:

  1. 알림은 시작할 활동의 추가 이름을 사용하여 브로드 캐스트 작업을 트리거합니다.

  2. 브로드 캐스트 수신자는 알림을 클릭 할 때이를 포착 한 다음 FLAG_ACTIVITY_REORDER_TO_FRONT 플래그를 사용하여 해당 활동을 시작하는 인 텐트를 생성합니다.

  3. 활동은 활동 스택의 맨 위로 가져 오며 중복되지 않습니다.


"Google Cloud Message"를 사용하여 "PendingIntent"클래스가있는 푸시 알림을 수신하는 경우 다음 코드는 작업 표시 줄에만 알림을 표시합니다.

알림을 클릭하면 활동이 생성되지 않으며 마지막 활성 활동이 문제없이 현재 상태를 유지하면서 복원됩니다.

Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);

mBuilder.setContentIntent(contentIntent);

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

챠오!

참고 URL : https://stackoverflow.com/questions/2232238/how-to-bring-an-activity-to-foreground-top-of-stack

반응형