Регистрация на мероприятия мероприятия
-
11-12-2019 - |
Вопрос
Есть ли способ зарегистрироваться на мероприятия мероприятия?Меня конкретно интересуют события onStart/onStop, и я не хочу добавлять для этого специальные операции в действие.
Решение
Один из способов получить события из жизненного цикла других действий — зарегистрировать свой класс как Application.ActivityLifecycleCallbacks
с главным Application
экземпляр и фильтровать события для Activity
вам интересно.
Это короткий пример (возможно, вы захотите зарегистрировать обратные вызовы из другого метода/класса, отличного от MainActivity.onCreate
или вы пропустите это сообщение;) и у вас может быть зависимость, которая вам не нужна)
О деятельности, за которой вы хотите следить:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Register a spy for this activity
getApplication().registerActivityLifecycleCallbacks(new ActivitySpy(this));
}
}
Тогда шпионский код будет выглядеть примерно так:
public class ActivitySpy implements ActivityLifecycleCallbacks {
private final Activity mActivity;
public ActivitySpy(Activity activity) {
mActivity = activity;
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (mActivity == activity)
Log.i("SPY", "Activity Created");
}
@Override
public void onActivityDestroyed(Activity activity) {
if (mActivity == activity)
Log.i("SPY", "Activity Destroyed");
}
// (...) Other overrides
}
Вы также можете зарегистрировать шпиона из другого места, если у вас есть ссылка на действие, за которым вы хотите следить.
Надеюсь, это поможет :)
РЕДАКТИРОВАТЬ: Забыл упомянуть, это будет работать только Уровень API 14 и выше...