为什么要通过Application类管理生命周期?

时间:2015-01-09 16:31:51

标签: android callback activity-lifecycle

我正在查看聊天演示应用程序中的代码,我注意到他们创建了一个扩展Application的类,而onCreate()内部则是以下行

registerActivityLifecycleCallbacks(new ActivityLifecycleHandler());

然后我查看了ActivityLifecycleHandler类,并且有像

这样的方法
public void onActivityDestroyed(Activity activity) {
}
public void onActivityPaused(Activity activity) {
}
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
public void onActivityStarted(Activity activity) {
}

然后在所有Activity类文件中,在onPause()中 - 也在onStart(),onResume(),ect中 - 例如,将引用Application类的生命周期。

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Application.activityPaused();
}

我想知道这是什么以及它做了什么?这是否意味着onPause()是针对Activity而Application.acitvityPaused()是针对整个应用程序的?这样做有什么好处吗?我不明白这是什么意思。提前谢谢。

1 个答案:

答案 0 :(得分:4)

我不知道,但只是谷歌搜索。检查来源。

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/app/Application.java.

你可以看到所有这一切都是调用你的回调方法,没有进一步的处理。评论还表明它的设计用途是用于处理状态持久性。

因此,您可以通过创建一个Activity基类来实现相同的目的,该类提供活动回调的覆盖,然后从中扩展您的所有活动。

public class BaseActivity extends Activity{
    @override
    public void onCreate(){
          super.onCreate(); // calls the framework method
    }
}

public class Activity1 extends BaseActivity{
    @override
    public void onCreate(){
         super.onCreate(); // calls the base method which in turn calls the framework method
         ...
    }
}

public class Activity2 extends BaseActivity{
    @override
    public void onCreate(){
         super.onCreate();
         ...
    }
}

将为所有活动调用这些方法,无论它们是否扩展基类。因此,此类生命周期将自动进行这些回调,而无需您执行任何其他操作。请注意,它仅展开Activity,而不是BaseActivity

public class Activity3 extends Activity{
     @override
     public void onCreate(){
          super.onCreate();
          ...
     }
 }

由于您无法在Java中进行多重继承,因此如果活动需要为所有活动扩展基类以外的其他内容,则必须开始链接回调,这可能会很快变得混乱。

最后,由于ActivityLifecycleCallbacks是一个接口,并且由于您可以注册该接口的多个实现,因此您可以使用一组回调来管理应用程序状态,另一组用于管理用户状态,也许一个用于管理服务或资源处理等,而不必在单个回调方法中混合该代码。