Android 在OnResume()中使用一次setContentView()可以吗
我听说过使用Android 在OnResume()中使用一次setContentView()可以吗,android,Android,我听说过使用setContentView()是多么糟糕 但是我想知道,如果我在活动的onResume()方法中使用一次setContentView(),我的应用程序是否不太可能导致内存泄漏 每当用户打开我的应用程序时,它都会检查设置中是否启用了某些功能。如果已启用,则应用程序使用与原始屏幕不同的屏幕 因此,我的代码如下所示: @Override protected void onResume() { super.onResume(); InputMetho
setContentView()是多么糟糕
但是我想知道,如果我在活动的onResume()
方法中使用一次setContentView()
,我的应用程序是否不太可能导致内存泄漏
每当用户打开我的应用程序时,它都会检查设置中是否启用了某些功能。如果已启用,则应用程序使用与原始屏幕不同的屏幕
因此,我的代码如下所示:
@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()
是否不太可能导致内存泄漏和其他类似问题?或者有更好的解决方案吗?我从几年前开始使用Android,但我从来没有这样做过,因为我喜欢坚持在onCreate
中几乎总是使用设置contentview
的模式
然而,我不相信你会有大麻烦做这件事(我的意思是内存泄漏)
尽管如此,我不认为做这样的事情有什么意义,活动的模式(或我如何理解它)更多的是:
我在onCreate
中创建一个视图,并在onResume
中更新其数据,如果数据为a,则添加/删除此视图,如果数据为B,则添加/删除此其他视图
完整地说,我阅读了您的(非常好)链接,我想您可能误解了如何应用Commonware所说的内容:您可以有多个视图,而没有不同的setContentView
:在这种情况下,您的视图结构需要真正模块化,并且您将能够动态加载所有子视图(或者,至少,这是我的同事和我正在做的;))
例如,我会为活动的基础设置一个空布局(比如蓝色背景),然后对于我想要的每个视图(每种情况),我会在生命周期的某个点(可能是在onResume
)加载一个动态布局。我不相信你所做的事情是特别糟糕的,但我怀疑人们是这样认为的^^
如果您需要多个屏幕,请使用片段
,甚至在视图内部创建一个新的活动
,这与我的想法一致
- 对于整个应用程序来说,只有一个
活动是不好的,否则它会很长很复杂
- 您的
onResume()
需要处理新视图及其ID,onClickListeners。。。等等
- 与
onCreate()
不同,onResume()
被多次调用,因此反复加载视图会浪费时间和内存
- 根据活动生命周期中的android文档,关于
onPause()
和onResume()
因为这种状态可以经常转换,所以这两种方法中的代码应该相当轻量级,以避免让用户等待的缓慢转换