Lifecycle:使用生命周期感知型组件处理生命周期
生命周期感知型组件可执行操作来响应另外一个组件(如Activity和Fragment)的生命周期状态的变化。这些组件有助于您写出更有条理且往往更精简的代码,这样的代码更易于维护;
一种常见的模式是在Activity和Fragment的生命周期方法中实现依赖组件的操作。但是,这种模式会导致代码条理性很差而且会扩散错误。通过使用生命周期感知型组件,您可以将依赖组件的代码从生命周期方法移入组件本身中。
Androidx.lifecycle软件包提供了可用于构建生命周期感知型组件的类和接口-这些组件可以根据Activity或Fragment的当前生命周期状态自动调整其行为。
在Android框架中定义的大多数应用组件都存在生命周期。生命周期由系统或进程运行的框架代码管理。它们是Android运作方式的核心,应用必须遵循她它们。如果不这样做,可能会引发内存泄漏甚至应用崩溃。
生命周期
lifecycle是一个类,用于存储有关组件(如Activity或Fragment)的生命周期状态的信息,并允许其他对象观察此状态。
LifecycleOwner
LifecycleOwner是单一方法接口,表示类具有Lifecycle.它具有一种方法(即getLifecycle()),该方法必须由类实现。如果您尝试管理整个应用进程的生命周期,请参阅ProcessLifecyleOwner。
public class MyLocationListener implements LifecycleObserver {
public MyLocationListener(LifecycleOwner lifecycleOwner) {
lifecycleOwner.getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void start() {
System.out.println("----------------------start");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void stop() {
System.out.println("----------------------stop");
}
}
public class MainActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyLocationListener(this);
textView = findViewById(R.id.text);
}
public void onClick(View view) {
String value = ((EditText) findViewById(R.id.edtext)).getText().toString();
}
}
参考
https://developer.android.google.cn/topic/libraries/architecture/lifecycle
https://codelabs.developers.google.com/codelabs/android-lifecycles/index.html