在处理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");
}
}
答案 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()
答案 1 :(得分:1)
在你的情况下,就内存消耗而言,它实际上没有任何区别。 Activity将通过其层次结构保存对该视图的引用,直到它被销毁为止是否保留对它的引用。释放您对它的引用不会使它被垃圾收集。
一旦活动通过onDestroy()
,它及其视图层次结构将被垃圾收集,所以对于这种情况我不会担心差异。
这可能会产生影响的一种情况是Fragment
s View
生命周期与组件生命周期不同。从View
或onCreateView()
持有对onViewCreated()
的引用,一旦进入后台,就会暂时导致额外的内存使用量。您可以在onDestroyView()
中释放引用,因为它们无论如何都无效 - 除非您手动保持整个视图层次结构。