Android界面和onCreate()

时间:2012-07-31 15:29:12

标签: android interface onclicklistener

这是关于在活动中使用接口的双重问题 - 即onclickListener(及相关)。

  1. onCreate应该很短 - 所以说文档 - 但如果我有很多很多的视图都有onClickListeners它可以很长。我担心这会导致UI线程超时。这是一个问题吗?
  2. 有没有最好的方法来使用onClickListener?我的意思是,对于Activity来说,实现onCLickListener然后有一个非常长的onClick()方法会更好吗?或者执行以下操作:

    mView.setOnClickListener(new OnClickListener(){
       ...
     });
    
  3. 每个视图

    ?这真的有什么不同吗?

3 个答案:

答案 0 :(得分:3)

它不应该加载您的活动,因为onClick侦听器中的代码只有在其视图上单击时才会执行。

此外,在 onCreate 中执行繁重的内容(网络,数据库,可绘制操作等)并不是一个好主意。如果你确实需要进行这样的处理,那么将它卸载到AsyncTask,它在一个单独的线程中运行你的代码,导致你的UI(主)线程空闲。

答案 1 :(得分:3)

  1. 他们的意思是“短”,因为onCreate()不需要花费很长时间来处理任何事情。任何像数学计算,网络或数据库访问,极大的位图通胀都应该在一个线程中完成。将onClickListener设置为视图的唯一开销是调用方法,设置引用,并且通常创建对象。如果对象创建执行上述任何操作,则最好在创建对象之前预先加载对象。

  2. 没有真正的区别。你选择什么完全取决于你的实施和编码。使用像你所展示的匿名对象有点像一种“一劳永逸”的风格。如果操作对按钮是唯一的,那么它是合适的。如果需要存在每次单击持续存在的状态,则需要创建实现onClickListener()的全新类。这样,您只需创建一次对象并将所有必要的视图设置为单个对象。如果许多视图在单击时执行相同的操作,以这种方式执行它也可能很有用。

答案 2 :(得分:2)

1)我同意Deev的回答。

2)请注意,如果您选择使用匿名内部类解决方案

mView.setOnClickListener(new OnClickListener(){
...
});

您为每个作业创建一个对象。 相反,如果您在活动中实施OnClickListener,则不会创建任何其他对象。这对于少量对象没有太大的区别,但是可以节省一些内存(并且从GC中省去)以获得更大的数量(并且你说有很多很多)对象。在Designing for Performance

中建议避免无用的对象创建