我听说过如何使用setContentView()
Pattern "One activity, multiple views": Advantages and disadvantages
但是我想知道,如果我在活动的setContentView()
方法中使用onResume()
一次,我的应用程序是否不太可能导致内存泄漏?
每当用户打开我的应用程序时,它会检查设置中是否启用了某些内容。如果已启用,则应用程序使用与原始屏幕不同的屏幕。
因此我的代码如下所示:
@Override
protected void onResume() {
super.onResume();
InputMethodManager im = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
String list = im.getEnabledInputMethodList().toString();
if(Stuff is true){
setContentView(R.layout.activityscreen_enabled);
}
}
}
使用setContentView()
是否不太可能导致内存泄漏和其他此类问题?或者有更好的解决方案吗?
答案 0 :(得分:0)
我几年前就开始使用Android而且我从未这样做过,因为我喜欢坚持setContentView
中几乎总是onCreate
的模式。
但是,我不相信你会有这么大的麻烦(因为我的意思是内存泄漏)。
尽管如此,我没有看到做这样的事情,Activity
(或我如何理解)的模式更多:
我在
onCreate
中创建了一个视图,并在onResume
中更新了数据,如果数据是A,则添加/删除此视图,如果数据是B,则添加/删除此其他视图
为了完整,我读了你的(非常好的)链接,我想你可能会误解你如何应用Commonsware所说的:你可以拥有多个视图而不需要setContentView
:你的视图结构需要,这种情况下,要真正模块化,你将能够动态加载所有子视图(或者,至少,这是我的同事和我正在做的事情;)。)。
对于您的示例,我将为活动的基础(让我们说蓝色背景)有一个空的布局,然后对于我想要的每个视图(每个案例),我将有一个动态布局,我加载生命周期中的某个点(可能在onResume
)。我不相信你所做的事情特别糟糕,但我怀疑它被认为是这样的^^
这link与我同意
答案 1 :(得分:0)
如果您需要多个屏幕,请使用Fragment
甚至创建一个新的Activity
,因为某些原因搞乱视图
Activity
并不好,或者它会如此漫长而复杂。onResume()
需要处理新视图及其ID,onClickListeners等。onResume()
不同,onCreate()
被多次调用,因此反复加载视图会浪费时间和内存。onPause()
和onResume()
因为这种状态可以经常转换,所以这两种方法中的代码应该相当轻量级,以避免使用户等待的缓慢转换。