Android - 用于Views的类变量vs方法变量

时间:2016-02-13 01:28:19

标签: android performance

在处理Android视图时,哪种方式更好的内存管理编程?我相信第二种方式更好,因为只有在需要时才能访问TextView,然后希望收集垃圾。很想听听你的意见!

  public class MainActivity extends Activity {
     TextView tvHelp; 

     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        tvHelp = (TextView) layout.findViewById(R.id.ivHelp);
        tvHelp.setText("Started"); 
     }


     @Override
     public void onResume() {
        super.onResume();

        tvHelp.setText("Resumed");
     }
  }

或者这个

  public class MainActivity extends Activity { 

     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        TextView tvHelp = (TextView) findViewById(R.id.ivHelp);
        tvHelp.setText("Started"); 
     }


     @Override
     public void onResume() {
        super.onResume();

        TextView tvHelp = (TextView) findViewById(R.id.ivHelp);
        tvHelp.setText("Resumed");
     }
  }

2 个答案:

答案 0 :(得分:1)

它没有那么大的区别。第一个将帮助您避免多次调用占用CPU的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="title"> <h1>Shopping List</h1> <div class="enter_todo"> <form id="todo_form" action="index.html" method="POST"> <input type="text" size="55" id="todo_description" name="todo_description"/> <input type="submit" id="add_todo" value="Add"/> </form> </div> </div> <div class="todo_list"> </div>。第二个将帮助您保留堆上的一些字节。但是通过这样做,您还将创建未引用的对象,这些对象将堆叠在堆上,直到GC通过(这是CPU消耗)。 GC也将在内存耗尽时启动(例如,当您创建未引用的对象时)。所以第一个解决方案肯定是最好的解决方案。 你会避免:

  • 代码重复
  • 多次调用findViewById()
  • 在GC通过之前将堆叠在堆中的未引用对象

答案 1 :(得分:1)

在你的情况下,就内存消耗而言,它实际上没有任何区别。 Activity将通过其层次结构保存对该视图的引用,直到它被销毁为止是否保留对它的引用。释放您对它的引用不会使它被垃圾收集。

一旦活动通过onDestroy(),它及其视图层次结构将被垃圾收集,所以对于这种情况我不会担心差异。

这可能会产生影响的一种情况是Fragment s View生命周期与组件生命周期不同。从ViewonCreateView()持有对onViewCreated()的引用,一旦进入后台,就会暂时导致额外的内存使用量。您可以在onDestroyView()中释放引用,因为它们无论如何都无效 - 除非您手动保持整个视图层次结构。

了解更多信息:https://stackoverflow.com/a/26370042/321697