Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在OnResume()中使用一次setContentView()可以吗_Android - Fatal编程技术网

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()
因为这种状态可以经常转换,所以这两种方法中的代码应该相当轻量级,以避免让用户等待的缓慢转换