2014-03-04 36 views
0

我已經完成了一些搜索我的問題的公平的一點,但找不到解決我的確切問題的任何解決方案。防止Android應用程序開放的多個實例

我有一個應用程序,有3個活動陸續進行。主要活動(啓動時),第二個活動(大部分肉類和內臟都存活),然後是最終活動,或多或少是第二個活動中發生的情況的總結頁面。

我偶爾遇到這個問題,如果我保持第二個活動在後臺運行(關閉手機的屏幕或打回家),然後點擊啓動器圖標返回到應用程序,它創建一個新的實例,而不是返回到我在後臺運行的第二個活動。我找不到任何押韻或原因,爲什麼有時會發生,而不是其他原因(通常不會)。大多數情況下,我需要回到我的第二項活動,並且這個活動在世界上都很好,但有時它又引發了另一個實例。

是否有無論如何檢查一個實例是否正在運行,並總是返回到該實例,如果有?

+1

當你說「Android應用程序的多個實例」時,我們在談論活動嗎?只能有一個應用程序實例。要回答您的問題,您首先需要了解活動生命週期以及與意圖一起使用的標誌,以控制活動在導航堆棧上的管理方式。您還應該瞭解,一旦活動進入後臺(在onPause()之後),下次活動進入前臺時,它可能是活動的新實例,並調用onCreate()。 – Simon

+0

順便說一句,我應該補充說,你把你的活動放在後臺,你的整個應用程序可能會被殺死,並且當你再次點擊圖標時重新開始。這取決於你當時會發生什麼。 – Simon

+0

我想他們是活動的新實例。我上面提到的第二個活動是播放音樂。所以我知道它永遠不會死,因爲即使當我的手機屏幕關閉時,它也會播放音樂。正如我之前所說的,大多數時候,當我在喚醒手機或從其他應用程序回來後點擊我的應用程序圖標時,它會將我帶到音樂播放的第二個活動中。但有時候,我會回到第一個活動,如果我再去第二個活動,這是它的一個新實例。我只是想避免這種情況發生,並且在點擊圖標時始終讓我參加第二項活動。 –

回答

0

當您點擊主頁或屏幕關閉時,應用程序會自動通過onStop()階段。根據可用內存的不同,該應用可能會成爲Android操作系統殺死的候選人。真的沒有辦法阻止操作系統殺死一個不再處於前臺的應用 - 這是一個Android操作系統設計。如果你沒有打開很多應用程序,這很可能不會發生。

如果應用程序的第一個實例仍然在附近,並且您啓動應用程序,它將自動檢索此實例。 Android的設計目的不是在第一個應用程序仍在運行時創建同一應用程序的第二個實例。因此,無法檢查是否有實例正在運行。您可以使用onDestroy()內部的日誌記錄來查看應用何時終止。但是,Android並不總是調用onDestroy(),可能只是簡單地終止應用程序。

+0

在某些情況下,您可能也無法使用onStop()。通常,onPause()和onResume()一起使用。除非有突然斷電或某處系統崩潰之類的災難,否則這兩個保證是有保證的。 – Simon

+0

@Simon以及我在評論中迴應您的評論時所說的第二項活動仍然在進行中,因爲它正在播放音樂,所以我認爲它沒有擊中onStop()... –

+1

正在使用服務嗎?在這種情況下,服務可以繼續運行。服務與活動不一樣。 – ucsunil