關於SingleInstance Activity的注意事項:
1.當Activity被多次通過Intent方式進入后,不會重復onCreate而是執行onNewIntent方法;
https://blog.csdn.net/su20145104009/article/details/50662731
2.兩個坑:https://blog.csdn.net/Mr_JingFu/article/details/79077613
- 啟動順序為:ActivityA->ActivityB(SingleInstance )->ActivityC ,點擊Back退出順序:C-》A-》B !!!
- 啟動順序為:ActivityA->ActivityB(SingleInstance ),點擊HOME鍵再切回應用,展示A而不是B。
- 解決方式是一樣的:
在ActivityB定義一個全局變量,public static boolean returnActivityB;在onCreate方法將returnActivityB=true;
然后在ActivityA界面onStart方法里判斷returnActivityB是否為true,是的話就跳轉到ActivityB,同時將returnActivityB=false;這樣就能解決跳轉的問題了。
3.如何合理的使用Activity:
https://www.cnblogs.com/dreamy890322/articles/6054395.html
如果不是應用退出,不要finish掉Instance,采用隱藏的方式:
@Override public boolean onKeyDown(int keycode, KeyEvent event) { L.e("Key_Stuta = " + event.getAction()); if (keycode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 右鍵處理 moveTaskToBack(true); } return true; }
-----------------------------------》
4.再填新坑。。。
問題 【singleInstance和singleTask導致startActivityForResult回調失敗】https://blog.csdn.net/ben0612/article/details/43083533
解析:startActivityForResult啟動singleTask的Activity,則onActivitResult()立即回調且resultCode為RESULT_CANCEL https://blog.csdn.net/sodino/article/details/22101881
5.設置了"singleTask"啟動模式的Activity的特點: https://blog.csdn.net/Luoshengyang/article/details/6714543
1. 設置了"singleTask"啟動模式的Activity,它在啟動的時候,會先在系統中查找屬性值affinity等於它的屬性值taskAffinity的任務存在;如果存在這樣的任務,它就會在這個任務中啟動,否則就會在新任務中啟動。因此,如果我們想要設置了"singleTask"啟動模式的Activity在新的任務中啟動,就要為它設置一個獨立的taskAffinity屬性值。
2. 如果設置了"singleTask"啟動模式的Activity不是在新的任務中啟動時,它會在已有的任務中查看是否已經存在相應的Activity實例,如果存在,就會把位於這個Activity實例上面的Activity全部結束掉,即最終這個Activity實例會位於任務的堆棧頂端中。
-----------------》
6.再添新坑
之所以用 onNewIntent(Intent intent) 而不是在 onResume() 中通過調用 getIntent()獲取最新Bundle中的信息,是因為 getIntent獲取的是第一次啟動時傳入的
一些舊的參數信息,最新的跳轉信息如 intent.putExtra("setting", "1"); 需要在onNewIntent傳入的intent參數中取出。。。謝特
getIntent();