安卓 通知 啟動應用(不重複建立activity)
阿新 • • 發佈:2020-11-14
在安卓通知中,有時候我們需要點選返回到當前的activity中,而不是建立新的。目前網上的各種setflags感覺沒什麼用。
經過不斷嘗試,找到三種比較好的實現方式。
- 設定當前activity的
android:launchMode="singleTask"
,這樣就不會重複建立新的activity
- 獲取當前包的啟動activity,然後在oncreate函式裡提前判斷是否已經存在。個人不喜歡這種方式,提高了耦合性。
PendingIntent pendingIntent = PendingIntent.getActivity( context, notifyId, msgIntent, PendingIntent.FLAG_UPDATE_CURRENT);
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!isTaskRoot()) { Intent intent = getIntent(); String action = intent.getAction(); if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && Intent.ACTION_MAIN.equals(action)) { finish(); return; } } }
https://blog.csdn.net/yinyignfenlei/article/details/78666325
- 給intent新增category,缺少這句才是setflags成功不了的原因。
Intent launcher = new Intent(Intent.ACTION_MAIN); //CATEGORY_LAUNCHER有了這個,你的程式就會出現在桌面上 launcher.addCategory(Intent.CATEGORY_LAUNCHER); //FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 按需啟動的關鍵,如果任務佇列中已經存在,則重建程式 launcher.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK); launcher.setComponent(new ComponentName(context,類名)); context.startActivity(launcher);```