【问题标题】:Making an object listen to Activity lifecycle events?让对象监听 Activity 生命周期事件?
【发布时间】: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。

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

【问题讨论】:

    标签: android activity-lifecycle


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案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);
      

      也许对某人有帮助

      【讨论】:

        猜你喜欢
        • 2013-04-09
        • 2023-03-07
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        相关资源
        最近更新 更多