문제

안드로이드에서는 활동 예방 확인을 정의했습니다.

내 응용 프로그램이 출시되면이 A-Activity의 인스턴스가 만들어졌습니다. A. 사용자가 버튼을 클릭하면 A, B- 활성의 또 다른 인스턴스, B가 생성되었습니다. 이제 작업 스택은 BA이며 B는 상단에 있습니다. 그런 다음 사용자는 B의 버튼을 클릭하여 C- 활동의 다른 인스턴스를 클릭하고 C가 생성되었습니다. 이제 작업 스택은 CBA이며 C는 상단에 있습니다.

이제 사용자가 C의 버튼을 클릭하면 응용 프로그램이 A를 전경으로 가져 오려고합니다. 즉, ACB의 상단에 A를 만들 수 있습니다.

코드를 작성하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

당신은 이것을 시도 할 수 있습니다 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);

이런 식으로, 내 패키지의 모든 활동이 가장 최근에 사용자가 사용했던 모든 활동을 다시 전면으로 가져옵니다. 내 서비스의 보급 인턴을 사용하여 사용자를 내 앱으로 되돌릴 때 이것이 유용하다고 생각했습니다.

다음은 수행 할 수있는 방법에 대한 코드 예입니다.

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);

동종 에코 이성 발사 모드는 Single_Task 여야합니다

일반적 으로이 활동 관리 방법은 권장되지 않는다고 생각합니다. 스택에서 두 번의 단계가 내려진 활동을 재 활성화하는 데있어 문제는이 활동이 사망했을 가능성이 있다는 것입니다. 당신의 활동의 상태를 기억하고 함께 시작하는 나의 조언 startActivity ()

나는 당신 이이 페이지를 보았다고 확신합니다 편의성이 링크

알림을 클릭 할 때 활동을 스택 상단에 가져 오려면 flag_activity_reorder_to_front 작업을 위해 다음을 수행해야 할 수도 있습니다.

이를위한 해결책은 알림이 트리거하는 행동을 방송하는 방송 수신기를 만드는 것이 었습니다. 그래서 기본적으로:

  1. 알림은 출시 할 활동의 이름을 추가로 방송 동작을 트리거합니다.

  2. 방송 수신기는 알림을 클릭 할 때 이것을 포착 한 다음 flag_activity_reorder_to_front flag를 사용하여 해당 활동을 시작하려는 의도를 만듭니다.

  3. 활동은 활동 스택의 상단으로 가져오고 복제물이 없습니다.

"Google Cloud Message"를 사용하여 "PendingEndent"클래스로 푸시 알림을받는 경우 다음 코드는 액션 표시 줄에 알림을 표시합니다.

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

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());

시아 오!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top