我应该删除onDestroyView中的OnClickListener吗?

时间:2016-02-10 11:12:13

标签: android android-fragments android-lifecycle android-memory butterknife

我为我的按钮设置了监听器:

/*const int m=32,n=40000; //n isnt 40000, change it so that its the size of    radioactivedata
    int a[n]; // variable to hold each number as it is read from file
    int i=0,j=0; //define variables
    for ( i=0 ; i<n ; i++ ) a[i]=0;
    for ( i=0 ; i<n ; i++ ); rad >> a[i]; //read numbers from rad into array with (>>) operator

    unsigned long Num=0;
    while(j<n){
        i = 0; //reinitialize i and Num 
        Num = 0;
        while ( i<m ){
            Num = Num + (a[j])*pow(2.,i);
            i++;
            j++;
            }

        cout << j/m << "\t" << Num << endl;
        out << j/m << "\t" << Num << endl;
 }*/

如果我使用ButterKnife,建议在 View onCreateView(...) { ... btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //some work } }); ... } 中致电ButterKnife.unbind(this)。我是否需要删除侦听器以避免内存泄漏?

onDestroyView(){..}

1 个答案:

答案 0 :(得分:5)

这取决于......

您是否有不同的纵向和横向布局,并且您已将其配置为在旋转时仅视图被销毁?

如果是这样,以阻止在已使用的活动/片段上引用未使用的视图(这可能会阻止它成为GC)

如果旋转视图并且片段/活动被销毁,那么您不需要这样做,GC将负责处理。< / p>

这种差异的存在是由于Android在其GC上使用Mark-Sweep算法,这将防止收集2个未使用的对象(循环引用)的情况......但是< strong> not 使用过的对象引用未使用的对象的情况

关于此问题的一些有用的问答: