2016-08-11 35 views
2

我已經注意到一個問題,當我暫停我的應用程序,比如說按回家,然後調出最近的應用程序列表(通過方形按鈕)恢復它。爲什麼不能從最近應用程序開始,如果暫停太久

如果我在暫停後立即恢復,它可以正常工作。但是,如果我讓它停留太久,即幾個小時或一夜之間,那麼當我觸摸它的窗口恢復它時,它只會發佈「未能開始......」吐司並從列表中刪除該應用程序。

我周圍搜索,但還沒有找到任何有關什麼會導致這個或如何開始調試它的信息。

回答

0

我的理論是與活動生命週期有關。你可以在這裏找到它: https://developer.android.com/training/basics/activity-lifecycle/starting.html

當應用程序暫停時,在onPause()函數被調用,如果應用程序被暫停,並且系統需要內存,以便在前臺運行的另一個應用程序,它會停止或破壞活動。當你回到應用程序,它調用onCreate()和onStart()函數

我不知道你的應用程序是如何構建的,但我的猜測是,當活動停止時,它會留下一些需要引用不再存在的東西的代碼,或者摧毀引用的東西本身。然後,當onStart()被調用時,它會檢查那個不再存在並且崩潰的東西。

解決此問題的最佳方法是確保生命週期的每個步驟都不引用在調用時可能不存在的任何內容。

+0

我會看看,到目前爲止我還沒有看到任何證據表明它是一個崩潰,雖然它很難複製,所以我沒有轉載它時,我有一個開發環境方便尋找堆棧跟蹤。 –

0

當用戶通過按主頁按鈕離開任務時,當前活動停止並且其任務進入後臺。系統保留任務中每個活動的狀態。如果用戶稍後通過選擇啓動該任務的啓動器圖標來恢復該任務,則該任務將進入前臺並恢復堆棧頂部的活動。

如果用戶長時間離開任務,系統將清除除根活動外的所有活動的任務。當用戶再次返回任務時,只有根活動恢復。系統的行爲方式是這樣的,因爲在很長一段時間之後,用戶可能已經放棄了之前正在做的事情,並且正在返回到開始新事物的任務。

您可能會查找有關Tasks and Back Stack的Android文檔以及有關Pausing and Resuming活動的一些信息。 :)

+0

看起來,如果應用程序從主屏幕重新啓動,就會發生清除。如果我嘗試從最近的應用程序列表中啓動應用程序,而不是從主屏幕啓動,則只會看到此問題。 –

0

您可能與Android上的內存管理有關。它看起來像android殺死你的應用程序釋放內存,以便它可以被其他應用程序使用。我有一個非常複雜的佈局應用程序(該應用程序加載太多的圖像)。有時候,當我從最近的應用程序列表中運行應用程序時,它總是從頭開始運行應用程序。不是從我離開應用程序的最後一個狀態開始的。 Anywa,沒什麼好擔心的。這是正常的行爲。

+0

如果從初始狀態重新啓動,則可以;我看到的問題是它有時並不是從最近的清單開始的。 –

0

由於我關心的,這是你的problem-

  • 你開始一個活動。
  • 然後你按主頁按鈕。並且活動進入後臺。
  • 當應用程序從暫停的活動開始5分鐘後啓動應用程序。但是當您在5小時後啓動應用程序時,應用程序將從頭開始。

解決方案 -

  • 發生這種情況,因爲該活動在後臺通過Android系統被殺害。
  • 通過調用活動的ondestroy()方法可以終止應用程序。
  • 當應用程序轉到後臺時,它會被添加到android系統的應用程序堆棧中。當android需要更多的內存用於任何操作時,它會佔用應用程序堆棧中最後一個應用程序的內存。它會殺死最後一個應用程序並佔用它的內存。
  • 這是您的應用程序在很長一段時間後死亡的原因。你的應用程序在堆棧的最後,android已經殺死你的應用程序來獲取內存。
  • 你可以找到更多的解釋過程here

如何解決這個問題

  • 這可以通過將您的應用程序堆棧的前定期來解決。

  • 您可以在後臺運行您的活動中的服務,以便保持在堆棧的頂端。

  • 或將上次打開的活動保存在共享首選項中,並在應用程序啓動時轉到此活動。

+0

這不是從錯誤狀態開始的問題。問題是該應用程序根本無法啓動。 –

+0

應用程序無法啓動?那麼當你點擊應用程序圖標時會發生什麼? –

+0

最近列表並未真正顯示圖標,它顯示預覽窗口。點擊即可顯示敬酒。 –

相關問題