لایف سایکل
يكشنبه, ۱۹ بهمن ۱۳۹۹، ۰۶:۵۳ ب.ظ
اکتیویتی (یا فرگمنت) لایف سایکل داره، بنابراین lifeCycle owner است.
میشه یه کلاسی را به عنوان observer برای اکتیویتی تعریف کرد که براساس state های مختلف عملیات متفاوتی انجام بده.
برای این کار باید dependency لایف سایکل رو در گریدل وارد کنیم:
def lifecycle_version = "2.2.0"
def arch_version = "2.1.0"
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
حالا یک کلاس lifeCycle observer میسازیم:
public class MainActivityObserver implements LifecycleObserver {
private static final String TAG = "MainActivityObserver";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreateCalled(){
Log.d(TAG, "Observer: ON_CREATE");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStartCalled(){
Log.d(TAG, "Observer: ON_START");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResumeCalled(){
Log.d(TAG, "Observer: ON_RESUME");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPauseCalled(){
Log.d(TAG, "Observer: ON_PAUSE");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStopCalled(){
Log.d(TAG, "Observer: ON_STOP");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroyCalled(){
Log.d(TAG, "Observer: ON_DESTROY");
}
}
این کلاس را به اکتیویتی معرفی میکنیم:
public class MainActivity extends AppCompatActivity {
ActivityMainBinding activityMainBinding;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);
Log.d(TAG, "Owner: onCreate");
getLifecycle().addObserver(new MainActivityObserver());
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "Owner: onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "Owner: onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "Owner: onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "Owner: onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "Owner: onDestroy");
}
}
اول متدهای اکتیویتی و سپس متدهای کلاس observer فراخونی میشه:
۹۹/۱۱/۱۹