Разница между 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;
    }

}

protected void onDestroy() используется для очистки программы. Однако я видел несколько примеров проектов, которые обычно используют public void onDestroy() для очистки.

Насколько я знаю, в Java к методу protected можно получить доступ внутри пакета, а к методу public можно получить доступ где угодно. Но обычно класс имеет свой собственный метод onDestroy(), значит ли это, что можно использовать любой из них?? Есть ли какие-либо моменты, о которых я должен беспокоиться при выборе между ними?

Спасибо за помощь.


person Kit Ng    schedule 04.12.2012    source источник


Ответы (3)


Между общедоступным и защищенным нет никакой разницы в функциональности. Единственная разница в том, что с public вы сможете вызывать onDestroy() для экземпляра активности из любого класса. С защищенным вы можете вызывать только в том же классе или подклассах в том же пакете. С onDestroy() не вижу большого смысла выкладывать это на всеобщее обозрение. На самом деле это может быть плохой практикой.

Другими словами, просто используйте protected, если у вас нет особой причины сделать его доступным для большего количества классов.

Я думаю, что публичные реализации, которые вы видели, просто ошибка/не нужна. Если вы хотите проверить, просто измените его на защищенный. Если ошибок компилятора нет, то и не нужно.

person User    schedule 04.12.2012
comment
Извините, в моем вопросе есть ошибки, он публичный, а не частный. - person Kit Ng; 04.12.2012

Определение onDestroy в Activity — protected onDestroy(). В вашем подклассе Activity вы можете написать protected onDestroy или public onDestroy и компилятор не будет жаловаться. Более общепринятой практикой программирования было бы писать protected onDestroy, сводя к минимуму раскрытие метода. Однако маловероятно, что запись public onDestroy когда-либо вызовет ошибку. Поэтому люди вставляют его, не задумываясь, и забывают о нем. По крайней мере, я так делаю.

person emrys57    schedule 04.12.2012

onDestroy() — это один из методов активности жизненного цикла. Чтобы создать свою собственную активность, вы должны расширить класс активности.

В классе активности android все методы жизненного цикла защищены, поскольку в соответствии с передовой практикой java рекомендуется иметь ограничение доступа к этим методам жизненного цикла только в производных классах.

Это не создаст никаких проблем, даже если вы используете public onDestroy(), но в соответствии с рекомендуемыми рекомендациями мы должны защищать его.

Чтобы получить четкое представление, пожалуйста, проверьте эту ссылку ниже. https://www.baeldung.com/java-protected-access-modifier

person Community    schedule 05.01.2020