6

这是我的代码的一部分:

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;
    }

}

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

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

感谢您的帮助。

4

3 回答 3

6

在公共和受保护之间,功能没有区别。唯一的区别是,使用 public,您将能够onDestroy()从任何类调用活动的实例。使用受保护的,您只能在同一包中的同一类或子类中调用。我onDestroy()认为公开它没有多大意义。这实际上可能是不好的做法。

换句话说,除非你有非常特殊的理由让更多类可以访问它,否则只使用protected。

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

于 2012-12-04T19:18:53.963 回答
2

Activity中的定义onDestroyprotected onDestroy()。在您的 Activity 子类中,您可以编写protected onDestroyorpublic onDestroy并且编译器不会抱怨。更传统地接受的编程实践是编写protected onDestroy,最大限度地减少该方法的暴露。但是,写入public onDestroy极不可能导致错误。所以人们不假思索地把它放进去,然后忘记它。至少,这就是我所做的。

于 2012-12-04T19:26:13.763 回答
0

onDestroy() 是活动的生命周期方法之一。要创建自己的活动,您应该扩展活动类。

在 android 的活动类中,所有生命周期方法都受到保护,因为 java 的最佳实践建议仅在派生类中对这些生命周期方法进行访问限制。

即使您使用 public onDestroy() 也不会产生任何问题,但根据推荐的最佳实践,我们应该对其进行保护。

要获得清晰的理解,请查看以下链接。 https://www.baeldung.com/java-protected-access-modifier

于 2020-01-05T06:50:07.263 回答