没有类的Android应用程序?

我最近见过一个关于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> 

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

先谢谢你,

尼克拉斯

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

所以,虽然你不能让你的Activity成为一个对象,但你仍然可以通过在你的AndroidManifest使用android:launchMode属性来使它成为一个Singleton:

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

有关launchMode属性(包括其他可能的值)的更多信息,请查看官方文档

您不能通过Android上的kotlin对象来替换Activity类,这是因为您没有通过调用它的构造函数来实例化活动:活动是由平台管理的。

当你(通过一个Intent)询问一个Activity的平台时,平台将会尝试通过调用它的构造函数来实例化它,并使用零参数。 对于一个对象来说不存在这个错误。

这就是说,一些开发人员通过只有一个活动并使用自定义逻辑来在视图之间进行导航,从而绕过了Android给出的框架,比如迫击炮 。