10

我无法将继承的概念应用于 Android 活动 - 例如。 ActivityA extends Activity并且 ,然后如果我使用 ActivityB 启动,则调用两个活动(A 然后 B)的ActivityB extends ActivityAonCreate() 方法。

我的问题是,在典型的 Java 中,来自 ActvityA 的 onCreate 应该被覆盖——但 onCreate 更像是一个构造函数,即使它是一个函数。继承如何在 Android 中工作,尤其是。wrt 其他函数,如 onPause()、onResume 等?

编辑:我还注意到 ActivityA 可能在其 onCreate() 中调用了许多抽象方法,其定义在 ActivityB 中提供。这是如何运作的 ?

4

3 回答 3

7

如果你有你的基础 Activity 然后像这样扩展它Activity- >Activity A这意味着当你的 onCreateActivity A被调用并且你调用时,原始super.onCreate();的方法也会被调用。onCreate()Activity

如果你然后像这样扩展Activity AActivity B调用工作......

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

它不是构造函数,它是一种调用来创建Activities. 如果您随后从其他扩展它们,则将Activities通过其super方法调用其超类。这并不意味着Activities您继承的 也将被创建。Activity B将是您创建的Activity.

编辑: Android 开发者网站上的 这个页面非常有用,因为它直观地解释了 Android 活动生命周期。

于 2013-08-30T06:51:10.800 回答
1

是的,作为一个典型的 java 函数 onCreate 应该被继承,但它没有得到:为什么?- 因为它不仅仅是一种方法,它是一个生命周期阶段。

AFAIK,Activity 不仅是一个 java 类,而且它是一种特殊类型的 JAVA 类,它有自己的生命周期,生命周期阶段意味着每次使用该类/活动时都会被调用,即使你已经声明或没有声明这些方法 onCreate()、onPause() 等肯定会被调用。

所以每次基础活动都会被创建和销毁。这就是它的本性。

如果您对此有疑问,可以尝试使用抽象类、接口和任何其他公共类在您的所有活动中继承公共代码。

于 2013-08-30T07:02:11.547 回答
0

继承在 Android 中是如何工作的?

Android 没有什么特别之处。它完全按照应有的方式工作。

例子?

让我们创建一个BaseActivity监听BroadcastReceiverSCAN_RESULTS_AVAILABLE)。
所以常见的功能是,

  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 回答