我最近看了一个关于Redux的JS演讲。演讲者编写了一个可以工作的应用程序,没有任何类,只有常量变量。他甚至在他的lint文件(https://github.com/MartinSeeler/redux-presentation/tree/master/demo)中排除了类。
因此,我尝试在我的Android应用程序中做同样的事情,这些应用程序是用Kotlin编写的。不幸的是,当我试图使我的MainActivity类成为一个对象时,我得到了以下错误:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{blog.app.niklas.flyingbytes/blog.app.niklas.flyingbytes.MainActivity}: java.lang.IllegalAccessException: void blog.app.niklas.flyingbytes.MainActivity.<init>() is not accessible from java.lang.Class<android.app.Instrumentation>
Caused by: java.lang.IllegalAccessException: void blog.app.niklas.flyingbytes.MainActivity.<init>() is not accessible from java.lang.Class<android.app.Instrumentation>有没有办法解决这个问题?我真的很喜欢在我的应用程序中拥有尽可能多的单例对象的想法。
先谢谢你,
尼克拉斯
发布于 2017-02-15 07:24:07
正如Geoffrey所说,Android平台管理你的活动,但这也意味着该平台负责跟踪你的活动实例-这就是Singleton的目的。
因此,虽然您不能将Activity设为对象,但您仍然可以通过在AndroidManifest中使用android:launchMode属性使其成为单例
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">有关launchMode属性(包括其他可能的值)的更多信息,请查看Official Documentation
发布于 2017-02-13 08:04:24
在Android上,你不能用kotlin对象替换Activity类,因为同样的原因,你不能通过调用它的构造函数来实例化Activity:Activity是由平台管理的。
当你(通过一个意图)请求一个活动的平台时,平台会尝试通过调用它的零参数构造函数来实例化它。这对于一个对象是不存在的,给出了前面提到的错误。
也就是说,一些开发人员避开了安卓提供的框架,比如mortar,他们只有一个activity,并使用自定义逻辑在视图之间导航。
https://stackoverflow.com/questions/42187956
复制相似问题