10

継承の概念を Android アクティビティに適用するのに問題があります。 ActivityA extends Activityそして 、ActivityB で起動すると、両方のアクティビティ (A と B) のActivityB extends ActivityAonCreate() メソッドが呼び出されます。

私の質問は、典型的な Java では、 ActvityA の onCreate をオーバーライドする必要がありますが、 onCreate は関数であるにもかかわらず、むしろコンストラクターとして動作しています。Android、特に継承はどのように機能しますか。onPause()、onResume などの他の関数について。

編集: また、ActivityA には、その定義が ActivityB で提供されている onCreate() で呼び出される多くの抽象メソッドがある可能性があることにも気付きました。これはどのように作動しますか ?

4

3 に答える 3

7

基本アクティビティがあり、それをそのように拡張する場合Activity-> Activity AonCreateActivity Aが呼び出されて呼び出されると、元super.onCreate();onCreate()メソッドActivityも呼び出されることを意味します。

その後、呼び出しに拡張Activity Aすると、次Activity Bのように機能します...

Activity B.onCreate()- super.onCreate();--> Activity A.onCreate()- super.onCreate()--> Activity.onCreate().

コンストラクターではなく、 を作成するために呼び出されるメソッドActivitiesです。その後、それらを他のものから拡張すると、Activitiesそのスーパークラスがそのsuperメソッドを介して呼び出されます。Activitiesあなたが継承した も作成されるという意味ではありません。Activity Bあなたが作成した になりますActivity

編集: Android デベロッパー Web サイトのこのページは、Android アクティビティのライフサイクルを視覚的に説明しているため、非常に便利です。

于 2013-08-30T06:51:10.800 に答える
1

はい、典型的なJava関数onCreateとして継承されているはずですが、取得できません:なぜですか? - それは単なる方法ではなく、ライフサイクルの段階だからです。

私の知る限り、アクティビティは単なるJavaクラスではありませんが、独自のライフサイクルを持つ特別なタイプのJAVAクラスであり、ライフサイクルステージは、宣言しているかどうかにかかわらず、そのクラス/アクティビティを使用するたびに呼び出されることを意図していますこれらのメソッド onCreate()、onPause() などが確実に呼び出されます。

したがって、基本アクティビティが作成および破棄されるたびに。それが自然です。

これに問題がある場合は、Abstract クラス、インターフェイス、およびその他のパブリック クラスを使用して、すべてのアクティビティで共通のコードを継承してみてください。

于 2013-08-30T07:02:11.547 に答える
0

継承は Android でどのように機能しますか?

Androidについて特別なことは何もありません。それは正確に機能します。

例?

( SCAN_RESULTS_AVAILABLEBaseActivity )をリッスンする を作成しましょう。 したがって、一般的な機能は、BroadcastReceiver

  1. に登録BroadcastReceiverするonCreate()
  2. BroadcastReceiver登録解除onDestroy()

ベースクラス:

public class BaseActivity extends AppCompatActivity{

    private WifiScanReceiver wifiScanReceiver; 

    @Override
    public void onCreate(Bundle sis)
    {
        super.onCreate(sis);   
        // Don't call setContentView() because no layout is needed              
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
        unregisterReceiver(wifiScanReceiver);
    }

    private void registerMyReceiver(){
         wifiScanReceiver = new WifiScanReceiver();
         registerReceiver(wifiScanReceiver, new 
         IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
         manager.startScan();
    }

}

子クラス:

public class BlahBlahActivity extends BaseActivity{

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);      // this will call BaseActvity method which will call AppcompatActivty method
        setContentView(R.layout.yourlayout);
    }
}
于 2019-04-16T06:48:12.670 に答える