没有类的Android应用程序?

时间:2017-02-12 13:11:26

标签: android kotlin

我最近看到过关于Redux的JS讨论。扬声器编写了一个没有任何类的工作应用程序,仅使用const变量。他甚至在他的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>

有办法解决这个问题吗?我真的很喜欢在我的应用程序中拥有尽可能多的单例对象的想法。

提前谢谢你,

Niklas

2 个答案:

答案 0 :(得分:2)

你不能用Android上的kotlin对象替换Activity类,原因与你不通过调用它的构造函数来实例化Activity相同: 活动由平台管理。

当您(通过Intent)请求Activity的平台时,平台将尝试通过调用零参数的构造函数来实例化它。对象不存在,给出上述错误。

据说,一些开发人员躲避Android给出的框架,如mortar,只有一个活动,并使用自定义逻辑在视图之间导航。

答案 1 :(得分:0)

正如杰弗里所说,Android平台管理您的活动,但这也意味着该平台负责跟踪您的活动实例 - 这是Singleton的目的。

因此,虽然您无法将“活动”设为对象,但仍可以使用android:launchMode中的AndroidManifest属性将其设为单身人士:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleInstance">

有关launchMode属性的更多信息(包括其他可能的值),请查看Official Documentation