这是一个良好实践和智能解决方案的问题,我需要一个建议。
我有一个应用程序(据我在Stackoverflow和Google搜索中可以阅读):
第一个问题是,如果我在阅读Stackoverflow和Googled文章的观察中是对的吗?
第二个问题,解决问题的任何好建议?我需要建议
答案 0 :(得分:5)
扬
我们的应用程序中的JNI对象存在类似的问题。问题是JNI链接不能作为普通的Java对象工作,必须明确地解决。与此同时,我们的活动可以随时被Android销毁。
我们当前的解决方案是将JNI对象存储在应用程序级别,并且只要引用为零,就可以管理引用和删除对象。如果活动将永远被破坏,也会破坏JNI参考。所以这就像你在上一篇文章中所做的那样。
但是,如果您希望在一段时间后使应用程序可扩展,您可能会理解此解决方案并非理想。
Android系统有时会临时破坏活动以节省内存。在您的情况下,所有带文档的JNI对象仍将消耗内存。所以这里最好的解决方案是能够将JNI级别的文档保存到捆绑包中。如果用户可以更改您的文档,这一点尤为重要。在这种情况下,通过在onSaveInstanceState中保存JNI对象的状态,您可以销毁您的JNI对象并在onCreate中重新创建。然而,在这里分析需要多少时间来销毁/创建保存到捆绑文档的JNI对象是非常重要的,因为我们必须在某些情况下(例如肖像/横向模式)快速支持活动重建,并使用一些有限的捆绑(不超过1Mb) )。如果进程很长,这个解决方案可能不太好。 另外,您希望有一个任务 - 一个文档系统。当您在一个任务中有多个活动时,您应该考虑这种情况。
Android的第二项始终不会调用onDestroy()。如果你做了一些保存操作,这里的数据可能会丢失。
希望这些信息对您有所帮助。