我有一個正在運行JNI的Android本機遊戲。
當我想退出應用程序時,我正在調用Activity的Finish方法。活動被破壞,但本機(進程或內存)沒有被破壞(或清除)。如何銷燬Android活動被破壞時的本機進程
所以,當我再次啓動遊戲,遊戲的以前的狀態直接與任何本地裝載恢復。
如何殺死我的本地進程以釋放資源。
我有一個正在運行JNI的Android本機遊戲。
當我想退出應用程序時,我正在調用Activity的Finish方法。活動被破壞,但本機(進程或內存)沒有被破壞(或清除)。如何銷燬Android活動被破壞時的本機進程
所以,當我再次啓動遊戲,遊戲的以前的狀態直接與任何本地裝載恢復。
如何殺死我的本地進程以釋放資源。
Android的活動生命週期在很大程度上由一個過程的概念,這確實使事情棘手的解耦,當你口常規的程序結構給它。
理想情況下,你會修改本地程序具有初始化和銷燬程序,這樣你可以告訴它停下來清理,以類似的活動生命週期。任何線程都應停止運行。嘗試清理一些事情,再次調用初始化例程將導致一個乾淨的,功能性的新實例。
更拼命,你可以嘗試完成()的活動,然後調用System.exit()。這是高度不鼓勵 - 它會在logcat中留下看起來有問題的消息,並且可能Android甚至可能會在新流程中快速重新創建您,在這種情況下,您需要邏輯來避免重新啓動本機引擎,太。
另一件需要注意的事情可能是在不同的進程中運行你的本地代碼,它們可以在清單中以這種方式聲明的android組件中託管,也可以作爲獨立的可執行文件運行在它自己的純本機進程中dvm或art)使用管道,unix套接字或可能的共享內存進行通信。你應該知道
感謝您的回覆:)。然後,我想我必須徹底摧毀一切在本地手動。我可以使用Activity :: OnDestroy來做到這一點嗎? – 2014-11-03 04:20:11
明白了!謝謝@Chris – 2014-11-03 04:39:42
一件事是finish()
或System.exit()
只能破壞當前活動。如果你想退出應用程序,你應該先清除活動棧。
Android原生的過程就不會停止,即使活動結束..
兩個方法我知道要解決這個問題是
1)建立在你的JNI本地類中的方法停止本機進程和調用它形成你的活動。
2)只需調用android.os.Process.killProcess(android.os.Process.myPid());不建議
第二個方法使用只有別人沒有辦法..
@deduplicator - 這是程度的衆所周知的後果的Android從託管進程的離婚一用戶可見的會話的概念。這實際上是一個概念問題。不需要代碼。 – 2014-11-03 03:59:41