Android - Kotlin:在扩展应用程序的 class 中实例化一个对象,并在所有活动中使用它
Android - Kotlin : Instantiate an object once inside the class that extends application and use it in all activities
我的目标是在 class 中实例化一个扩展应用程序 class 的对象,然后在所有活动中静态使用它,es:
假设我们有一个class要静态使用或与单例模式一起使用
class MyObject( arg1: Any){
fun OneFunction(){
.....
}
}
假设我们在Manifest中声明了名为App的应用程序(从而创建扩展Application()的Appclass)
class App : Application(){
override fun onCreate() {
super.onCreate()
}
}
目标是能够在任何 activity
中静态使用该对象
class MainActivity : AòppCompactActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
MyObject.OneFunction()
}
}
在您的简单情况下,您实际上缺少一个 class,它将充当全局可访问的对象实例容器。
class MyObject(arg1: Any){
fun oneFunction() {
// ...
}
}
class App : Application() {
override fun onCreate() {
super.onCreate()
Deps.myObject = MyObject(Any())
}
}
其中Deps
是
object Deps {
lateinit var myObject: MyObject
}
然后
class MainActivity : AppCompactActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Deps.myObject.oneFunction()
}
}
在 MyObject 中创建 companion
并在 Application
的重写中实例化 class
class MyObject : App() { //extends your App or in-build Application
override fun onCreate() {
super.onCreate()
instance= this
}
fun oneFunction() {
// ...
}
companion object{
lateinit var instance: MyObject
}
}
在任何activity
中都这样使用
MyObject.instance.oneFunction();
在你的解决方案之前,我使用的是 SingletonHolder 模式
open class SingletonHolder<out T, in A>(private val constructor: (A) -> T) {
@Volatile
private var instance: T? = null
fun getInstance(arg: A): T {
return when {
instance != null -> instance!!
else -> synchronized(this) {
if (instance == null) instance = constructor(arg)
instance!!
}
}
}
}
class MyManager private constructor(context: Context) {
fun doSomething() {
...
}
companion object : SingletonHolder<MyManager, Context>(::MyManager)
}
以及内部活动:
MyManager.getInstance(context).doSomething()
我的目标是在 class 中实例化一个扩展应用程序 class 的对象,然后在所有活动中静态使用它,es:
假设我们有一个class要静态使用或与单例模式一起使用
class MyObject( arg1: Any){
fun OneFunction(){
.....
}
}
假设我们在Manifest中声明了名为App的应用程序(从而创建扩展Application()的Appclass)
class App : Application(){
override fun onCreate() {
super.onCreate()
}
}
目标是能够在任何 activity
中静态使用该对象
class MainActivity : AòppCompactActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
MyObject.OneFunction()
}
}
在您的简单情况下,您实际上缺少一个 class,它将充当全局可访问的对象实例容器。
class MyObject(arg1: Any){
fun oneFunction() {
// ...
}
}
class App : Application() {
override fun onCreate() {
super.onCreate()
Deps.myObject = MyObject(Any())
}
}
其中Deps
是
object Deps {
lateinit var myObject: MyObject
}
然后
class MainActivity : AppCompactActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Deps.myObject.oneFunction()
}
}
在 MyObject 中创建 companion
并在 Application
的重写中实例化 class
class MyObject : App() { //extends your App or in-build Application
override fun onCreate() {
super.onCreate()
instance= this
}
fun oneFunction() {
// ...
}
companion object{
lateinit var instance: MyObject
}
}
在任何activity
中都这样使用MyObject.instance.oneFunction();
在你的解决方案之前,我使用的是 SingletonHolder 模式
open class SingletonHolder<out T, in A>(private val constructor: (A) -> T) {
@Volatile
private var instance: T? = null
fun getInstance(arg: A): T {
return when {
instance != null -> instance!!
else -> synchronized(this) {
if (instance == null) instance = constructor(arg)
instance!!
}
}
}
}
class MyManager private constructor(context: Context) {
fun doSomething() {
...
}
companion object : SingletonHolder<MyManager, Context>(::MyManager)
}
以及内部活动:
MyManager.getInstance(context).doSomething()