在OnResume()中使用setContentView()一次是否可以

时间:2016-04-24 23:56:35

标签: android

我听说过如何使用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()是否不太可能导致内存泄漏和其他此类问题?或者有更好的解决方案吗?

2 个答案:

答案 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()
  • 的活动生命周期中的android doc
  

因为这种状态可以经常转换,所以这两种方法中的代码应该相当轻量级,以避免使用户等待的缓慢转换。