onCreate() 方法不是调用方法 A,而是 onStart() 调用方法 A
onCreate() method is not calling method A but onStart() calls method A
我有一个 onCreate() 方法,看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
if (blah) {
blahblah;
} else {
method1();
}
MethodA();
}
一个 onActivityResult 方法,看起来像这样:
@Override
protected void onActivityResult(int a, int b, Intent c) {
super.onActivityResult(b, a, c);
if (b == blah) {
if (a == blah) {
Method1();
}
}
}
方法 1():
public void Method1() {
blah
}
我有一个应该第一次出现的 methodA()(目前它没有出现,除非我将 methodA() 放在 onStart() 中 - 然后它只会在第二次尝试打开应用程序时出现
public void MethodA() {
sets text on screen
}
根据我在 Android 中的知识,应该调用它。从你提供的信息来看,我能做的调试和错误搜索是有限的,但我想知道你是如何检查你的函数是否被调用的。
- 据我了解,您只相信视觉反馈来验证您的函数是否被调用。
我不希望这样,尤其是在您的特定情况下,您说它确实会在两次启动后出现。
尝试使用 Logcat(默认集成在 Android Studio 中,不是插件)来检查函数是否被调用。首先验证是否在启动时调用了 onCreate(根据我的经验应该是这样)。
在你的 class 之上写入静态成员变量(如果你写入“logt”并按 Tab,它会自动创建):
private static final String TAG = "ActivityName";
在 OnCreate 方法中写入(如果您写入“logd”并按 Tab,它会自动创建自己):
log.d(TAG, "I am printing from the OnCreate method");
在 Logcat 中,您将能够过滤 debugTagName。
https://developer.android.com/studio/debug/am-logcat
如果这不是问题,请验证您使用的是片段还是 activity。在容器中,可能会更早地为片段调用 OnCreate 方法(当它们不在屏幕上时)。这应该不会导致任何问题,但当项目以编程方式从另一个片段中移动或删除时可能会出现问题。
根据您的描述,onCreate() 方法返回的时间似乎早于预期。
如果正在设置布局,(即 setContentView() 调用有效)那么,MethodA() 应该肯定会执行,除非如前所述,onCreate() 方法在 if 或 else 块执行中提前返回.使用调试器进行单步调试,单步跳过if-else块中的method1()等方法调用。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
/* Did you check this If-Else block so that the control actually */
/* goes down below? to MethodA() */
if (blah) {
blahblah;
} else {
method1();
}
MethodA();
}
我有一个 onCreate() 方法,看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
if (blah) {
blahblah;
} else {
method1();
}
MethodA();
}
一个 onActivityResult 方法,看起来像这样:
@Override
protected void onActivityResult(int a, int b, Intent c) {
super.onActivityResult(b, a, c);
if (b == blah) {
if (a == blah) {
Method1();
}
}
}
方法 1():
public void Method1() {
blah
}
我有一个应该第一次出现的 methodA()(目前它没有出现,除非我将 methodA() 放在 onStart() 中 - 然后它只会在第二次尝试打开应用程序时出现
public void MethodA() {
sets text on screen
}
根据我在 Android 中的知识,应该调用它。从你提供的信息来看,我能做的调试和错误搜索是有限的,但我想知道你是如何检查你的函数是否被调用的。
- 据我了解,您只相信视觉反馈来验证您的函数是否被调用。
我不希望这样,尤其是在您的特定情况下,您说它确实会在两次启动后出现。
尝试使用 Logcat(默认集成在 Android Studio 中,不是插件)来检查函数是否被调用。首先验证是否在启动时调用了 onCreate(根据我的经验应该是这样)。
在你的 class 之上写入静态成员变量(如果你写入“logt”并按 Tab,它会自动创建):
private static final String TAG = "ActivityName";
在 OnCreate 方法中写入(如果您写入“logd”并按 Tab,它会自动创建自己):
log.d(TAG, "I am printing from the OnCreate method");
在 Logcat 中,您将能够过滤 debugTagName。
https://developer.android.com/studio/debug/am-logcat
如果这不是问题,请验证您使用的是片段还是 activity。在容器中,可能会更早地为片段调用 OnCreate 方法(当它们不在屏幕上时)。这应该不会导致任何问题,但当项目以编程方式从另一个片段中移动或删除时可能会出现问题。
根据您的描述,onCreate() 方法返回的时间似乎早于预期。
如果正在设置布局,(即 setContentView() 调用有效)那么,MethodA() 应该肯定会执行,除非如前所述,onCreate() 方法在 if 或 else 块执行中提前返回.使用调试器进行单步调试,单步跳过if-else块中的method1()等方法调用。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
/* Did you check this If-Else block so that the control actually */
/* goes down below? to MethodA() */
if (blah) {
blahblah;
} else {
method1();
}
MethodA();
}