如果 Activity 被销毁,我可以从 Activity 调用静态方法吗?

Posted

技术标签:

【中文标题】如果 Activity 被销毁,我可以从 Activity 调用静态方法吗?【英文标题】:Can I call static method from Activity if Activity is destroyed? 【发布时间】:2019-02-17 12:20:26 【问题描述】:

Xamarin.android 中,如果一个 Activity 由于内存不足而被杀死,我仍然可以从另一个 Activity 中调用该 Activity 中定义的静态方法吗? em>活动。例如:

public class MyKilledActivity : Activity 

  ....
  public static int MyStaticMethod()
  
    .....
    return someIntValue;
  


public class AnotherActivity : Activity

    .....
    int value = MyKilledActivity.MyStaticMethod(); // Would it work if MyKilledActivity is destroyed?

【问题讨论】:

是的,我假设someIntValue 也是基于静态的,还是从静态值派生的。 也许只是作为一个提示,有更合适的方式将值从活动传递到活动而不是静态 getter。意图即。 【参考方案1】:

您可以随时在任何可访问的类上调用静态方法。只需使用 MyClass.staticMethod()。请注意,如果 deadInstanceOfMyClass == null,则不能以这种方式调用 deadInstanceOfMyClass.staticMethod()。

【讨论】:

【参考方案2】:

如果Activity被销毁,我可以从Activity调用静态方法吗?

正如 SushiHangover 所说,答案是肯定的。

在 Xamarin.Android 中,如果 Activity 因内存不足而被终止,我还能从另一个 Activity 调用该 Activity 中定义的静态方法吗?

请注意,Android 不会杀死单个活动,Android 会杀死进程。

进程大致是一个应用程序以及该应用程序中的所有内容 - 与该特定应用程序相关的所有活动、服务、应用程序类,在大多数情况下,一个应用程序等于一个进程。

这意味着,如果 Android 修剪了一个进程,则其中的所有活动(以及与该应用程序相关的所有其他内容)也将因此而死。 Android(尤其是当达到特定内存阈值时负责终止进程的 Android 内核)不会修剪该进程/该应用程序中的单个组件,它甚至不知道或不关心它们的存在。

因此,如果您的应用因内存不足而被系统杀死,那么您的所有Activity 都将被销毁。

【讨论】:

【参考方案3】:

,假设someIntValue 是静态的或硬编码的整数值。

【讨论】:

以上是关于如果 Activity 被销毁,我可以从 Activity 调用静态方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何从B Activity返回 A Activity但是不销毁B

活动垃圾收集

当Activity被销毁时,为什么Service会破坏自我?

android:当Activity和Service 都被销毁后,如何控制其中生成的线程?

Android - isFinishing() 的值会在 Activity 被销毁后保持为真吗?

如果 Activity 被操作系统杀死,我们如何检索保存的状态?