2017-02-28 28 views
15

打開此圖片是爲了解由launhmode singleTask提供的 功能,從hereSingleTask活動,而是通過兩個不同的應用

enter image description here但 採取相當有幫助,我在同一個應用程序的情況下理解這一點,我我有理解 問題,如果有什麼任務都屬於兩個不同的應用

混淆方案(虛構的),

  • 我正在瀏覽一個應用程序,該應用程序提供了一個動作來發送 電子郵件,我選擇'發送電子郵件'選項。
  • 我的手機的默認'電子郵件應用'將被選中,其活動(即宣佈爲singletask的 )將被打開。
  • 當我輸入我的電子郵件的內容,我切換到該應用程序被撞壞一些聊天應用程序,並 併爲我提供了一個選項,通過電子郵件來報告問題 給開發者,現在,當我將選擇「報告」 ,我的電子郵件 應用程序(這是相同的默認電子郵件應用程序)將被打開。

  • 現在,作爲電子郵件應用程序的根源活動是singletask,我寫的內容 將會顯示給我嗎?

最主要的是這個時候,任務/堆棧屬於兩個不同的應用程序。

+0

我對此表示懷疑,你的內容應該保存爲草稿,並且新的郵件活動應該與收件人的地址一起裝入它 儘管我覺得上面句子中的「should」必須改爲「Will」 – Neji

+0

@Neji The同樣的'懷疑'是什麼讓我把這個問題放在這裏:D。 – nobalG

+1

如果您不需要啓動它,您的singleTask活動將獲得回調onNewIntent()。在onNewIntent()中,它應該將先前的郵件內容存儲到草稿中,並清除寫入其中的內容,同時放置正確的收件人地址 – Neji

回答

6

即使你使用的是2級不同的應用程序,它會在工作expected way

  • 如果您singleTask活動已經存在,該副本將被使用,被調用的方法​​
  • 如果不存在的話,它會更技術性的推出按正常

,再現來自你的鏈接定義:

系統創建一個新任務並實例化新任務的 根目錄處的活動。但是,如果活動的一個實例已存在於單獨的任務中,系統將通過對其onNewIntent()方法的調用將目標路由到現有實例,而不是創建新實例的 。一次只能存在一個活動實例 。


這可以很容易地通過making an activity a target for sharing textsingleTask在清單驗證:

<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()方法,並顯示新的電子郵件之前保存當前草案。

+1

所以一個singleTask活動在Android設備上只有一個實例,我以爲singleTask活動可能有(或可以創建)每個應用程序一個實例。 – nobalG

+0

正確。您鏈接的頁面儘可能多地說,但檢查這些東西總是很好。玩代碼並使用ADB命令非常有趣;它真的開始有意義。網上有很多不正確的教程關於這個,所以要小心(我最近做了這個調查,我建議你也試試看) –

+1

**每個ANDROID設備的實例**驗證 – nobalG

相關問題