1. 程式人生 > 實用技巧 >安卓 通知 啟動應用(不重複建立activity)

安卓 通知 啟動應用(不重複建立activity)

在安卓通知中,有時候我們需要點選返回到當前的activity中,而不是建立新的。目前網上的各種setflags感覺沒什麼用。
經過不斷嘗試,找到三種比較好的實現方式。

  1. 設定當前activity的android:launchMode="singleTask",這樣就不會重複建立新的activity

  1. 獲取當前包的啟動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

  1. 給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);```

https://blog.csdn.net/angcyo/article/details/53116553