即使你使用的是2級不同的應用程序,它會在工作expected way:
- 如果您
singleTask
活動已經存在,該副本將被使用,被調用的方法
- 如果不存在的話,它會更技術性的推出按正常
,再現來自你的鏈接定義:
系統創建一個新任務並實例化新任務的 根目錄處的活動。但是,如果活動的一個實例已存在於單獨的任務中,系統將通過對其onNewIntent()方法的調用將目標路由到現有實例,而不是創建新實例的 。一次只能存在一個活動實例 。
這可以很容易地通過making an activity a target for sharing text和singleTask
在清單驗證:
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
現在添加一些記錄到onCreate()
和onNewIntent()
方法,並做一些場景測試。
東西測試各種launchmodes時,我發現特別有用的是以下ADB命令:
adb dumpsys activity activities
此輸出大量的文本(它可以幫助重新啓動手機在此之前 - adb reboot
)顯示活動任務堆棧的詳細信息。這可以用來向您顯示您的singleTask
活動通過不同的應用程序啓動時「重新建立」本身。
對於關於電子郵件的問題,我認爲,這將取決於其電子郵件客戶端您使用的,但我希望他們正確處理onNewIntent()
方法,並顯示新的電子郵件之前保存當前草案。
我對此表示懷疑,你的內容應該保存爲草稿,並且新的郵件活動應該與收件人的地址一起裝入它 儘管我覺得上面句子中的「should」必須改爲「Will」 – Neji
@Neji The同樣的'懷疑'是什麼讓我把這個問題放在這裏:D。 – nobalG
如果您不需要啓動它,您的singleTask活動將獲得回調onNewIntent()。在onNewIntent()中,它應該將先前的郵件內容存儲到草稿中,並清除寫入其中的內容,同時放置正確的收件人地址 – Neji