Scala对象能否在Android上重新启动活动?
我正在
Scala中编写一个
Android应用程序,但我无法找到这个问题的明确答案.
我的应用程序包含一个对象,其中包含一些在val中定义的静态数据.数据包括类的实例. 我的问题是,当Android决定杀死活动并稍后重新启动时,我的对象会发生什么?我知道Scala中的对象可以用来实现与Java中静态值类似的目的,但实际上并没有在生成的字节码中实现.那么Android知道在重新启动活动时重新初始化我的对象吗?是否存在不会这样做的情况,或者我必须小心的情况? 如果上面的答案是“一切都很好”,我认为由可变数据组成的对象将是完全不同的.在那种情况下,我非常确定我需要显式保存/恢复此类对象以保留状态.但是,保存/恢复始终相同且硬连接到APK本身的数据似乎很愚蠢. 解决方法
简而言之,对象被转换为单例,并且单个实例被保存在静态最终字段中.因此,对象将重新初始化,并且您需要序列化来为可变对象恢复相同的数据.
Scala编程(来自Odersky等人),第31章,解释了如何使用反编译器来获得所需的答案 – 这很容易. 基本上,给定这样的对象: object App { def main(args: Array[String]) { println("Hello,world!") } } 它将被翻译成一个名为App $的类,实现单例模式.特别是,单例实例包含在一个定义为public static final App $MODULE $= new App $()的字段中.,并将方法定义为实例方法. javap App $可用于确认字段的声明 – 可能jad也可以反编译源代码.如果没有定义伴随类,Scala还将定义一个名为App的类,其中包含从Java调用的相应静态final方法.这样,您将获得具有正确签名的App.main方法,并且可以调用scala App,后者又使用正确的附加库调用Java App. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |