莫问天涯路几重,轻衫侧帽且从容。这篇文章主要讲述从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。
推荐阅读
- 删除Android中的父活动链接
- 在Mac上看不到外部硬盘驱动器(这是解决方案)
- 如何在Kali Linux上启用声音
- 如何在Electron Framework中更改窗口缩放级别
- 如何在Kali Linux中使用John the Ripper使用蛮力破解PDF密码
- 如何在Kali Linux中使用Nmap枚举Web服务器目录
- 如何使用Kali Linux进行中间人(MITM)攻击
- 如何在Kali Linux上安装Spotify
- 如何在Kali Linux中使用Nikto2扫描Web服务器漏洞