Как уже отмечалось, если вы хотите создать Activity, вам нужно расширить Activity.
Кроме того, в вашем коде есть пара проблем:
1)
Если вы используете библиотеку поддержки 26.1.0+ и жизненные циклы 1.0.0-alpha9-1+, жизненные циклы уже включены, потому что
AppCompatActivity extends FragmentActivity
FragmentActivity extends SupportActivity
SupportActivity extends Activity implements LifecycleOwner
2)
Если вы используете старые библиотеки поддержки или жизненные циклы, у вас есть два варианта.
2a)
Если бы ваша деятельность расширила FragmentActivity
, вы бы вместо этого расширили LifecycleActivity
и все.
2b)
Если бы вы не могли этого сделать, вы бы реализовали LifecycleRegistryOwner
, например:
class MyActivity extends AppCompatActivity implements LifecycleRegistryOwner {
private final LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
@Override
public LifecycleRegistryOwner getLifecycle() {
return mLifecycleRegistry;
}
}
На этом примеры кода заканчиваются, но я не вижу никакого кода, который фактически отправляет события. При исследовании текущего SupportActivity
выясняется, что он использует ReportFragment
для отправки всех событий. Добавьте это, чтобы правильно отправлять события:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ReportFragment.injectIfNeededIn(this);
}
@CallSuper
protected void onSaveInstanceState(Bundle outState) {
this.mLifecycleRegistry.markState(State.CREATED);
super.onSaveInstanceState(outState);
}
Другое дело, это ошибка:
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreate(savedInstanceState: Bundle?) {
Метод onCreate
вызывает событие ON_CREATE
. А не наоборот. Вы получите такую ошибку переполнения стека.
Вы используете аннотацию @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
для методов, которые вы хотите запускать автоматически после вызова onCreate
, а не для самого метода onCreate
.
person
Eugen Pechanec
schedule
20.10.2017