从Singleton对象引用Android Activity View

莫问天涯路几重,轻衫侧帽且从容。这篇文章主要讲述从Singleton对象引用Android Activity View相关的知识,希望能为你提供帮助。
假设我有一个android活动(SecondaryActivity),它是从MainActivity开始的
SecondaryActivity包含文本视图TextView tv;
我有一个看起来像这样的Singleton:

public class Singleton { private static final Singleton instance = new Singleton(); private static TextView secTextView; public static Singleton getInstance() { return instance; }public void setTV(TextView tv){ secTextView = tv; }public TextView getTV(){ return secTextView; } }

在我的SecondaryActivity我做:
Singleton.getInstance().setTV(findViewById(R.id.sec_text_view));

现在想象一下,我在finish()中运行SecondaryActivity,所以程序状态返回MainActivity,从活动堆栈弹出SecondaryActivity
现在想象MainActivity运行
startActivity(new Intent(getApplicationContext, SecondaryActivity.class));

再来一次。
在此之后,如果我跑了
Singelton.getInstance().getTV().setText("hello world"));

我们是否会在活动堆栈顶部的Activity中引用TextView
另外,我的方法总体上有任何明显的问题吗?
答案
我们是否会在活动堆栈顶部的Activity中引用TextView?
只有你在第二次活动的Singleton.getInstance().setTV(findViewById(R.id.sec_text_view)); 方法中运行onCreate
另外,我的方法总体上有任何明显的问题吗?
是!!您不应将视图/活动引用放在静态类/字段中。您正在创建内存泄漏。当你从SecondaryActivity调用完成时,你的单身人士仍然引用文本视图,并且活动不能被垃圾收集。这会泄漏内存。
当你再次启动SecondaryActivity时,会创建一个新的SecondaryActivity实例。除非你再次调用setTV,否则你的单身人士仍会从完成的活动中引用文本视图。
这是一个blog post,提供有关内存泄漏的更多信息。
【从Singleton对象引用Android Activity View】如果你想简化视图绑定,你应该看看ButterKnife。

    推荐阅读