3

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

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

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

每个视图?它真的有什么不同吗?

4

3 回答 3

3

它不应该为你的活动的加载而烦恼,因为onClick只有在点击它的视图时才会执行监听器内的代码。

此外,在onCreate中执行繁重的东西(网络、数据库、可绘制操作等)并不是一个好主意。如果您确实需要进行此类处理,则将其卸载到AsyncTask在单独的线程中运行您的代码,从而使您的 UI(主)线程空闲。

于 2012-07-31T15:32:52.950 回答
3
  1. 它们的意思是“短”,即不做任何需要很长时间才能处理的事情onCreate()。像数学计算、网络或数据库访问、超大位图膨胀等任何事情都应该在一个线程中完成。设置视图的唯一开销onClickListener是调用方法、设置引用以及通常创建对象。如果对象创建做了上述任何事情,那么最好在创建对象之前预加载它。

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

于 2012-07-31T15:40:25.907 回答
2

1)我同意Deev的回答。

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

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

您为每个分配创建一个对象。相反,如果您OnClickListener在活动中实现,则不会创建任何其他对象。这对于少量对象并没有太大的区别,但可以为大量对象(你说有很多很多)节省一些内存(并从 GC 中拯救你)。性能设计中建议避免创建无用的对象

于 2012-07-31T15:48:24.133 回答