让对象监听 Activity 生命周期事件?
Posted
技术标签:
【中文标题】让对象监听 Activity 生命周期事件?【英文标题】:Making an object listen to Activity lifecycle events? 【发布时间】:2011-07-27 08:37:51 【问题描述】:我编写的其中一个类需要在以下Activity
事件发生时做出反应:
我可以对 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 生命周期事件?的主要内容,如果未能解决你的问题,请参考以下文章