2012-12-04 100 views
3

这里是我的代码的一部分:“public void onDestroy()”和“protected void onDestroy()”之间的区别?

package com.admobsdk_dfp_handler; 

import com.google.ads.*; 
import com.google.ads.doubleclick.*; 

import android.os.Bundle; 
import android.os.Handler; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.RelativeLayout; 

public class AdMobSDK_DFP_Handler extends Activity { 
    private DfpAdView adView; 
    private static final String adUnitId = "/7732/test_portal7/android_app1_test_portal7/top_banner_non_sdk_application_android_app1_test_portal7"; 
    private Handler handler = new Handler(); 
    private Runnable runnable = new Runnable() { 

     public void run() { 
      adView.loadAd(new AdRequest()); 
      handler.postDelayed(this, 5000); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_ad_mob_sdk__dfp__handler); 

     adView = new DfpAdView(this, AdSize.BANNER, adUnitId); 

     RelativeLayout layout = (RelativeLayout) findViewById(R.id.mainLayout); 

     layout.addView(adView); 

     adView.loadAd(new AdRequest()); 

    }; 

    @Override 
    protected void onPause() { 
     handler.removeCallbacks(runnable); 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     handler.postDelayed(runnable, 5000); 
     super.onResume(); 
    } 

    @Override 
    protected void onDestroy() { 
     handler.removeCallbacks(runnable); 
     super.onDestroy(); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.activity_ad_mob_sdk__dfp__handler, 
       menu); 
     return true; 
    } 

} 

保护无效的onDestroy()用于清理程序。但是,我看到一些示例项目,它们通常使用public void onDestroy()来进行清理。

据我所知,在Java中,保护方法可以在一个包中被访问,并公共方法可以在任何地方进行访问。但通常一个类有它自己的onDestroy(),那么这是否意味着可以使用?在他们之间进行选择时,我需要关注哪些问题?

谢谢你的帮助。

回答

4

公共和保护之间没有功能上的差异。唯一的区别是,对于公众,您可以在任何课程的活动实例上致电onDestroy()。有了保护,您只能在同一个包中的相同类或子类中调用。与onDestroy()我没有看到它的公开很多意义。这实际上可能是不好的做法。

换句话说,只要使用保护措施,除非您有一个非常特殊的理由使其可以被更多类访问。

我认为你看到的公共实现只是一个错误/没有必要。如果您想测试,只需将其更改回受保护状态。如果没有编译器错误,则没有必要。

+1

对不起,我的问题有一些错误,它是公开的而不是私人的 –

+0

好的,我会编辑。 – Ixx

+0

非常感谢你 –

1

Activity中onDestroy的定义是protected onDestroy()。在你的Activity子类中,你可以编写protected onDestroypublic onDestroy,编译器不会抱怨。更常规的编程习惯是编写protected onDestroy,尽量减少方法的暴露。然而,编写public onDestroy是不太可能导致错误。所以人们不加思索就忘记了。至少,这就是我所做的。

相关问题