【问题标题】:"Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)"“不要将 Android 上下文类放在静态字段中;这是内存泄漏(也会破坏 Instant Run)”
【发布时间】:2016-10-20 01:29:40
【问题描述】:

“不要将 Android 上下文类放置在静态字段中;这是内存泄漏(并且还会破坏 Instant Run)”在将任何 Android 控件设为静态时显示。除了创建 Parent 类的对象或使其(TextView)静态之外,还有什么更好的方法可以从其他类访问 android 控件(如 TextView)?

【问题讨论】:

  • 您最好展示您实施的内容以提供准确的解决方案。也就是说,@Alexander Kulyakhtin 提出了一个好方法

标签: android class memory-leaks static


【解决方案1】:

我不确定您所做的是否有效,但您可以使用事件总线,例如Otto 将事件从对象发送到对象(例如从服务发送到活动)

您可以拥有自己的Application 派生对象,这将是一个在您的程序运行时一直存在的单例,因此您可以在其中拥有静态字段。

【讨论】:

    【解决方案2】:

    众所周知,ApplicationMultiDexApplication 类在内存中始终保持活动状态,因此我们不需要将对象或变量设为 静态,只需将它们声明为正常( 非静态)一个,并通过创建该应用程序类的对象来调用,即。而不是直接将其称为静态..

    错误的方式:

    AppClass.myObj = 1;
    var = AppClass.myObj;
    

    正道:

    AppClass appClass = (AppClass)getApplicationContext();
    appClass.myObj=1;
    

    var= appClass.myObj;
    

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 2018-10-17
      • 2018-04-02
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2021-06-04
      相关资源
      最近更新 更多