在不使用butterknife和Databinding的情况下在android中的Activity中创建Instances的最佳方法

时间:2018-02-07 13:16:17

标签: android butterknife

我使用了两种在android活动中创建实例的方法。哪一种方法更好,方法1或方法2。

方法1:

//Global instance

    Button btn;

    //Inside Oncreate

    btn = (Button)findViewById(R.id.btn);

    //some other Place 
    btn.setVisibility(View.VISIBLE);  
    btn.setText("Hai");

方法2: //在需要的地方

((Button)findViewById(R.id.btn)).setVisibility(View.VISIBLE);

((Button)findViewById(R.id.btn)).setText("Hai");

Butterknife 数据绑定不是必需的。

3 个答案:

答案 0 :(得分:9)

方法#1的性能优于另一方法,因为您只执行方法For i = ListBox1.ListCount - 1 to Step -1 If ListBox1.Selected(i) Then Listbox1.RemoveItem(i) End If Next 一次。此方法负责在父布局的层次结构中搜索视图。当Activity被销毁时,垃圾收集器将释放按钮实例的内存。

答案 1 :(得分:1)

我肯定会选择方法#1 ,因为每次要访问时调用View#findViewById(int)都是代价高昂的操作,因为每次调用时方法,需要遍历整个视图层次结构才能找到view
因此,方法是执行一次并在Activity类中存储对视图的引用,可以在Activity#onCreate()内部,也可以在第一次访问视图时(尽管如此,它更好)在onCreate(),因为它更清洁。)

最后,要查找视图,您可以

  • 对于Target API< 26,

    Button mSignUpButton;
    
    @Override
    protected void onCreate(Bundle savedInstance){
      // regular stuff
    
      this.mSignUpButton = (Button) findViewById(R.id.signupbutton);
    }
    
  • 对于Target API> = 26和Android studio版本3及更高版本,

    Button mSignUpButton;
    
    @Override
    protected void onCreate(Bundle savedInstance){
      // regular stuff
    
      this.mSignUpButton = findViewById(R.id.signupbutton);
    }
    

    借助API 26和Android Studio 3,Google引入了编译器支持,可以自动将view转换为适当的子类型。

答案 2 :(得分:0)

似乎问题不太清楚。您询问Activity中的Activity实例或视图实例。

如果您正在寻找更好的方法来实例化活动视图元素&不想使用Butterknife或Databinding或任何其他lib。然后使用方法1,它比方法2更有效。方法1中的代码样板比方法2和方法2更简化。它将更多地优化为视图的无效状态。

Button btn;
//Inside Oncreate
btn = (Button)findViewById(R.id.btn);