public class testDemo extends Activity { public DevicePolicyManager mDPM; public ComponentName testDeviceAdmin; public testDemo(){ } public testDemo(ComponentName who){ testDeviceAdmin = who; assert (testDeviceAdmin != null); Log.d("testDemo", "testDemo:testDeviceAdmin is received "); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); assert (mDPM != null); Log.d("testDemo", "onCreate:mDPM is not null "); } 这段代码为什么onCreate函数不执行
时间: 2024-01-21 21:05:05 浏览: 68
根据您提供的代码,我们发现 testDemo 类中存在两个构造函数,一个是默认的无参构造函数,另一个是带有一个参数的构造函数。
在 Android 中,当您创建一个 Activity 对象时,系统会调用其默认的无参构造函数来创建实例,并调用其生命周期方法,包括 onCreate 方法。因此,如果您在 Activity 类中定义了一个带参数的构造函数,那么系统将不会调用该构造函数来创建 Activity 实例,也就不会执行 onCreate 方法。
在您的代码中,由于没有显式地调用带参数的构造函数,系统将会调用默认的无参构造函数来创建 testDemo 实例,从而导致 onCreate 方法不被执行。
要解决这个问题,您可以在默认的无参构造函数中初始化 testDeviceAdmin 变量,或者在创建 testDemo 实例时,显式地调用带参数的构造函数来初始化 testDeviceAdmin 变量。
以下是一些示例代码,演示了如何解决该问题:
1. 在默认的无参构造函数中初始化 testDeviceAdmin 变量:
```java
public class testDemo extends Activity {
public DevicePolicyManager mDPM;
public ComponentName testDeviceAdmin;
public testDemo() {
testDeviceAdmin = new ComponentName(this, testDemo.class);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
}
}
```
2. 在创建 testDemo 实例时显式地调用带参数的构造函数:
```java
public class testDemo extends Activity {
public DevicePolicyManager mDPM;
public ComponentName testDeviceAdmin;
public testDemo(ComponentName who) {
testDeviceAdmin = who;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
}
}
```
在这些示例代码中,我们分别在默认的无参构造函数和带参数的构造函数中初始化了 testDeviceAdmin 变量,以确保 onCreate 方法能够被正确地执行。
阅读全文