실행기에서 앱 아이콘을 클릭하여 활동을 시작하면 기록에서 선택하는 것처럼 활동이 전경으로 표시됩니다. 따라서 onCreate 호출은 존재하지 않아야합니다.Android 런처 아이콘을 클릭하면 새로운 활동이 시작됩니다. 알림에서 해당 활동을 시작한 후에 만 표시됩니다.
그러나 알림을 클릭하여 활동을 시작한 후에이를 실행하려고하면 시작 프로그램이 활동의 다른 인스턴스를 시작합니다.
런처가 계속 작동하도록 (배경과 응용 프로그램의 정확한 상태를 다시 시작하기 위해) 어떤 플래그를 추가해야합니까?
필수 코드를 게시 할 예정입니다.
이
알림을 시작합니다<activity
android:name="com.example.ihatenotifiicationsapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
이 resumeIntent가 자동으로 안드로이드에 의해 FLAG_ACTIVITY_NEW_TASK를 추가합니다 :
Intent resumeIntent = new Intent(this, MainActivity.class);
PendingIntent resumePendingIntent = PendingIntent.getActivity(this, 2,
resumeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification resumeNotification = new Notification.Builder(this).setContentTitle(
"Resume style")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(resumePendingIntent)
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
notificationManager.notify(1, launcherNotification);
이 매니페스트 활동 모습입니다. 이 플래그는 응용 프로그램을 백그라운드에서 다시 시작하는 것을 허용합니다.
이 알림을 클릭하고 앱을 다시 시작하면 실행기에서 앱을 클릭하면 Android에서 MainActivity의 다른 인스턴스를 실행합니다.
이것은 내 응용 프로그램과 백 스택을 손상시킵니다 (스택에 2 개의 MainActivity가 있으며 이상하게 보입니다).
알림을 클릭하기 만하면 재미있는 일입니다 (실행기 동작을 클릭하여 다른 인스턴스를 시작).
singleInstance는 일반적으로 원하는 것이 아닙니다. 하나의 인스턴스가 단독 작업으로 시작된 활동이 작업의 유일한 활동으로 시작되었습니다. 다른 활동이 시작되면 해당 활동은 FLAG_ACTIVITY_NEW_TASK가 인 텐트에있는 것처럼 실행 모드에 관계없이 다른 작업으로 시작됩니다. 일반적으로 선호하는 것은 "singleTask"입니다. –
singleTask는 솔루션 일 수 있지만 큰 문제가 1 개 있습니다. 실행 프로그램이 실행될 때 (ACTION_MAIN 및 CATEGORY.LAUNCHER를 사용하여 마지막으로 사용한 활동으로 사용자를 복원하려는 경우) 응용 프로그램을 시작하려면 운없는. standal launchMode를 사용하면 – aureliangtx