加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala对象能否在Android上重新启动活动?

发布时间:2020-12-16 18:35:08 所属栏目:安全 来源:网络整理
导读:我正在 Scala中编写一个 Android应用程序,但我无法找到这个问题的明确答案. 我的应用程序包含一个对象,其中包含一些在val中定义的静态数据.数据包括类的实例. 我的问题是,当Android决定杀死活动并稍后重新启动时,我的对象会发生什么?我知道Scala中的对象可
我正在 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读