5

我剛剛添加了用戶通過備份自定義文件類型在我的應用程序中恢復其數據的功能。當使用我的應用程序從文件瀏覽器打開文件時,我的根(主)活動打開,但在新實例中。例如,如果我的應用程序已打開並且從文件資源管理器打開還原文件,我的應用程序的新實例將在我的根活動處打開。在android的任務管理器中,這看起來像我的應用程序在文件瀏覽器中運行,如果這是有道理的。由於還原過程會更改用戶數據,因此應用程序的原始實例可能會停止運行,因爲它處於與數據相關的活動中。如何通過不同的意圖訪問應用程序的多個實例

如何通過不同的意圖訪問我的應用程序時,如何防止我的應用程序的多個實例?謝謝。

更新:我周圍搜索,仍然無法找到解決方案。幫助將不勝感激。在清單我根系活力

意圖過濾器:

<manifest 
    android:launchMode="singleInstance" 
... 
<application 
    android:... > 
<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="file" android:pathPattern=".*\\.grdcsv" android:mimeType="*/*" android:host="*"/> 
</intent-filter> 

<!-- For email attachments --> 
<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/octet-stream" android:pathPattern=".*\\.grdcsv" android:scheme="content" /> 
</intent-filter> 

回答

3

如何防止我的應用程序的多個實例時,它通過不同的意圖這樣的訪問?

您可以嘗試在清單中的活動聲明中使用android:launchMode="singleTask"。如果您看到文檔,它會顯示:

系統在新任務的根目錄創建活動並將意圖路由到該活動。但是,如果活動的實例已經存在,則系統通過調用onNewIntent()方法將意圖路由到現有實例,而不是創建新實例。

這可能不會像您在問題中提到的那樣創建新實例。嘗試一下。讓我知道你是否仍然面臨同樣的問題。

+0

謝謝,因爲它*阻止它作爲新實例啓動。但是,我已經看到了兩個不良的副作用。 1)當我從桌面快捷方式啓動正在運行的應用程序時,它從根活動開始,而不是用戶離開的地方。 2)當我用應用程序打開自定義文件擴展名時,應用程序將啓動到根活動,而不調用文件的操作。我必須再次啓動活動才能獲得該行爲。這就像意圖越來越混亂。 – NSouth 2014-11-24 21:05:12

+0

@NSouth嘗試'singleTop'而不是'singleTask'。現在會發生什麼? – 2014-11-25 01:03:36

+0

這實際上是以前的樣子。我可能會離開它,因爲我只是在恢復他們的數據時才這樣做。如果他們有一個開放的實例,而底層的數據通過另一個實例發生變化,他們會崩潰,但應該沒問題。我希望。 – NSouth 2014-11-25 01:06:11

相關問題