Android Interfaces and onCreate()



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

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

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

对于每个视图?真的有什么区别吗?

  1. 它们的意思是"短",因为不会做任何需要很长时间才能在onCreate()处理的事情。 像数学计算、网络或数据库访问这样的任何事情,非常大的位图膨胀都应该在线程中完成。 将onClickListener设置为视图的唯一开销是调用方法、设置引用以及通常创建对象。 如果对象创建执行上述任何操作,则最好在创建对象之前预加载对象。

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

它不应该打扰活动的加载onClick因为侦听器中的代码仅在单击其视图时执行。

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

1(我同意Deev的回答。

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

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

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

最新更新