从Singleton对象引用Android Activity View
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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,提供有关内存泄漏的更多信息。
如果你想简化视图绑定,你应该看看ButterKnife。
以上是关于从Singleton对象引用Android Activity View的主要内容,如果未能解决你的问题,请参考以下文章