让对象监听 Activity 生命周期事件?

Posted

技术标签:

【中文标题】让对象监听 Activity 生命周期事件?【英文标题】:Making an object listen to Activity lifecycle events? 【发布时间】:2011-07-27 08:37:51 【问题描述】:

我编写的其中一个类需要在以下Activity 事件发生时做出反应:

onStart() onPause() onResume() onStop()

我可以对 Activity 本身的内容做出反应:

public class Activity extends ApplicationContext

    protected void onCreate(Bundle savedInstanceState);

    protected void onStart();

    protected void onRestart();

    protected void onResume();

    protected void onPause();

    protected void onStop();

    protected void onDestroy();

通过Activity,我可以告诉相关对象发生了某个事件,但我不喜欢这个想法:它需要开发人员在我的object/class 之外实现逻辑。理想情况下,我希望对象负责注册这些事件并将自己设置为侦听器,独立于Activity

有什么想法吗?提前致谢。

【问题讨论】:

【参考方案1】:

API 级别 14 具有 Application.ActivityLifecycleCallbacks。 在此之前,afaik,对不起,没有。 如果您希望将您的类提供给其他人,您将需要提供扩展最常见 Activity 的抽象类,或者让他们将某些调用放入自己的 Activity 生命周期方法中,例如

受保护的 void onPause() 
  超级.onPause();
  yourClassInstance.onPause();

也可以让它更通用,并创建接受 NotifyingActivity.LifecycleListener 的抽象 NotifyingActivity 类,并使您的类实现这样的侦听器并在其构造函数中注册自己。

【讨论】:

一个使用Application.ActivityLifecycleCallbacks的例子,可能对某人有用:gist.github.com/alexjlockwood/6298122【参考方案2】:

利用自 API 级别 14 以来引入的 ActivityLifecycleCallbacks。

这就是界面现在的样子。

public interface ActivityLifecycleCallbacks 
    void onActivityCreated(Activity activity, Bundle savedInstanceState);
    void onActivityStarted(Activity activity);
    void onActivityResumed(Activity activity);
    void onActivityPaused(Activity activity);
    void onActivityStopped(Activity activity);
    void onActivitySaveInstanceState(Activity activity, Bundle outState);
    void onActivityDestroyed(Activity activity);

您需要做的只是实现接口方法并将其注册到您的应用程序中。

public class MyApplication extends Application implements ActivityLifecycleCallbacks 
    @Override
    public void onCreate() 
         super.onCreate();
         this.registerActivityLifecycleCallbacks(this);
    

    //implement call back methods. 

【讨论】:

【参考方案3】:

您可以使用 this library 来完成您想要做的事情,而无需在您的活动或基础活动中编写代码。

而且使用起来非常简单:

ActivityListener.bind(mActivity).with(mCallback);

也许对某人有帮助

【讨论】:

以上是关于让对象监听 Activity 生命周期事件?的主要内容,如果未能解决你的问题,请参考以下文章

监听Activity生命周期方式及案例讲解

Activity的生命周期

面试题:Activity横竖屏切换时的生命周期如何变化

activity生命周期

Android四大基本组件介绍与生命周期

生命周期函数事件处理函数和API