2

android 中有ComponentCallbacks 接口,由活动、活动组、服务等使用。他们实现了它,当活动配置发生变化时有人通知他们。所以,我想创建我自己的类来实现 ComponentCallbacks 监听 onConfigurationChanged 并做一些动作......所以我的类正在实现,但是......我想我需要在某人的观察者中注册我的类。

那么,有可能吗?有什么方法可以“注册”我自己的课程,以便在配置更改时得到通知?

我猜这个人可能是ActivityThread,它的方法collectComponentCallbacksLocked。但是我在这里没有看到任何注册我自己的课程的方法。

ActivityThreadComponentCallbacks 使用

ps 当然我可以重写activity的方法onConfigurationChange change,然后调用我类的onConfigurationChanged方法,但是我不想要。我想知道android中是否有任何方法可以做到这一点。

4

3 回答 3

6

在“Google I/O 2012 - 事半功倍:成为一名优秀的 Android 公民”演讲(您可以在 youtube 上找到)中,解释说您可以通过调用Context.registerComponentCallbacks. 因此,您只需让您的类实现ComponentCallbacks接口(或ComponentCallbacks2按照您的意愿),自动添加您可以覆盖的方法,然后从您的 Activity、Fragment 中传递实例以注册到它。像这样的东西:

 registerComponentCallbacks( mYourClass );

那应该做的工作:)

于 2012-10-04T08:43:28.217 回答
2

根据@Sandra 的回答,我们可以使用 Context.registerComponentCallbacks 在系统中注册我们自己的组件回调,并像这样使用它:

context.registerComponentCallbacks(new ComponentCallbacks() {

            @Override
            public void onLowMemory() {
                // make some operations when system memory is low
            }

            @Override
            public void onConfigurationChanged(Configuration newConfig) {
                // make some operations when configuration has been changed
            }
        });

当系统配置更改/内存不足时,将调用我们所有注册的回调。

API 级别 14 中可用的方法registerComponentCallbacks 。在此处查看它的工作原理

于 2012-10-04T00:52:49.450 回答
0

你要做的是注册一个 BroadcastReceiver 来接收这个广播意图:

Intent.ACTION_CONFIGURATION_CHANGED

每当配置更改时,系统都会广播该事件。

于 2012-07-01T12:16:55.113 回答