我在onCreate方法和Activity中有一些代码,并注意到它被调用了三次.这是正常的行为吗?谢谢.
Che*_*mon 25
您可能希望阅读有关Activity生命周期的文档.
OnCreate只会在Activity的每个生命周期中调用一次.但是,有许多情况会导致您的活动被杀死并恢复生机.因此,onCreate将再次被调用.
为了正确支持这一点,您可以将状态信息保存在onSaveInstanceState中,并在创建时获得的状态包中恢复它.
M. *_*han 18
除了预期的情况之外,我观察到只有那些活动(onCreate)被调用两次才创建新的Thread或Runnable.(我相信这是Android中的一个错误).
解决方案很简单(尽管你可能不喜欢它:p)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
if(savedInstanceState == null){
// everything else that doesn't update UI
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
就我而言,onCreate子类的方法运行了两次。onCreate调用超类的方法后更改主题会导致此问题。我在onCreate超类的方法之前设置主题,然后onCreate子类的方法不再被调用。
public class XActivity extends YActivity { // XActivity is subclass
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.xl);
}
...
public class YActivity extends AppCompatActivity { //YActivity is superclass.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme();
}
...
Run Code Online (Sandbox Code Playgroud)
转换成这样:
public class YActivity extends AppCompatActivity { // YActivity is superclass.
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setTheme();
super.onCreate(savedInstanceState);
}
...
Run Code Online (Sandbox Code Playgroud)
就我而言,它是在onCreate之后调用setDefaultNightMode:
super.onCreate(savedInstanceState);
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
Run Code Online (Sandbox Code Playgroud)
这解决了它:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
super.onCreate(savedInstanceState);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25944 次 |
| 最近记录: |