这是关于在活动中使用接口的双重问题 - 即onclickListener(及相关)。
有没有最好的方法来使用onClickListener?我的意思是,对于Activity来说,实现onCLickListener然后有一个非常长的onClick()方法会更好吗?或者执行以下操作:
mView.setOnClickListener(new OnClickListener(){
...
});
?这真的有什么不同吗?
答案 0 :(得分:3)
它不应该加载您的活动,因为onClick
侦听器中的代码只有在其视图上单击时才会执行。
此外,在 onCreate 中执行繁重的内容(网络,数据库,可绘制操作等)并不是一个好主意。如果你确实需要进行这样的处理,那么将它卸载到AsyncTask
,它在一个单独的线程中运行你的代码,导致你的UI(主)线程空闲。
答案 1 :(得分:3)
他们的意思是“短”,因为onCreate()
不需要花费很长时间来处理任何事情。任何像数学计算,网络或数据库访问,极大的位图通胀都应该在一个线程中完成。将onClickListener
设置为视图的唯一开销是调用方法,设置引用,并且通常创建对象。如果对象创建执行上述任何操作,则最好在创建对象之前预先加载对象。
没有真正的区别。你选择什么完全取决于你的实施和编码。使用像你所展示的匿名对象有点像一种“一劳永逸”的风格。如果操作对按钮是唯一的,那么它是合适的。如果需要存在每次单击持续存在的状态,则需要创建实现onClickListener()
的全新类。这样,您只需创建一次对象并将所有必要的视图设置为单个对象。如果许多视图在单击时执行相同的操作,以这种方式执行它也可能很有用。
答案 2 :(得分:2)
1)我同意Deev的回答。
2)请注意,如果您选择使用匿名内部类解决方案
mView.setOnClickListener(new OnClickListener(){
...
});
您为每个作业创建一个对象。
相反,如果您在活动中实施OnClickListener
,则不会创建任何其他对象。这对于少量对象没有太大的区别,但是可以节省一些内存(并且从GC中省去)以获得更大的数量(并且你说有很多很多)对象。在Designing for Performance