2014-11-03 109 views
2

我有一個正在運行JNI的Android本機遊戲。
當我想退出應用程序時,我正在調用Activity的Finish方法。活動被破壞,但本機(進程或內存)沒有被破壞(或清除)。如何銷燬Android活動被破壞時的本機進程

所以,當我再次啓動遊戲,遊戲的以前的狀態直接與任何本地裝載恢復。

如何殺死我的本地進程以釋放資源。

+0

@deduplicator - 這是程度的衆所周知的後果的Android從託管進程的離婚一用戶可見的會話的概念。這實際上是一個概念問題。不需要代碼。 – 2014-11-03 03:59:41

回答

0

Android的活動生命週期在很大程度上由一個過程的概念,這確實使事情棘手的解耦,當你口常規的程序結構給它。

理想情況下,你會修改本地程序具有初始化和銷燬​​程序,這樣你可以告訴它停下來清理,以類似的活動生命週期。任何線程都應停止運行。嘗試清理一些事情,再次調用初始化例程將導致一個乾淨的,功能性的新實例。

更拼命,你可以嘗試完成()的活動,然後調用System.exit()。這是高度不鼓勵 - 它會在logcat中留下看起來有問題的消息,並且可能Android甚至可能會在新流程中快速重新創建您,在這種情況下,您需要邏輯來避免重新啓動本機引擎,太。

另一件需要注意的事情可能是在不同的進程中運行你的本地代碼,它們可以在清單中以這種方式聲明的android組件中託管,也可以作爲獨立的可執行文件運行在它自己的純本機進程中dvm或art)使用管道,unix套接字或可能的共享內存進行通信。你應該知道

+0

感謝您的回覆:)。然後,我想我必須徹底摧毀一切在本地手動。我可以使用Activity :: OnDestroy來做到這一點嗎? – 2014-11-03 04:20:11

+0

明白了!謝謝@Chris – 2014-11-03 04:39:42

-1

一件事是finish()System.exit()只能破壞當前活動。如果你想退出應用程序,你應該先清除活動棧。

0

Android原生的過程就不會停止,即使活動結束..

兩個方法我知道要解決這個問題是

1)建立在你的JNI本地類中的方法停止本機進程和調用它形成你的活動。

2)只需調用android.os.Process.killProcess(android.os.Process.myPid());不建議

第二個方法使用只有別人沒有辦法..