1

我希望能够动态构建一个 Activity,它具有我们拥有的一些功能(例如防止滚动、监控互联网连接、防止方向改变等)。

我们不想创建一个BaseActivity包含所有功能的所有可能属性和抽象方法的抽象。我们将在子类中有很多空函数实现,BaseActivity它们只需要实际实现其中的几个函数。更糟糕的是,如果我们想到另一个功能(要添加到的另一组属性和函数BaseActivity),我们将不得不编辑每个子级BaseActivity以实现新的抽象函数(很可能是空的)。

另一种BaseActivity继承方法是创建仅实现我们拥有的少数功能的子类。但这将要求我们为每个功能组合创建一个子类,即使功能很少,也太多了。另外,这会导致 2+ 子类的大量重复代码实现相同的功能。

所以,我想到了实现装饰器模式,但我认为我们实际上并没有实例化一个新的活动。我们总是在它的构造函数中创建一个Intent并指定SomeActivity.class,然后我们调用startActivity(new Intent(getApplicationContext(), SomeActivity.class));

有没有办法拦截 Activity 的实际实例化,对其执行装饰器模式操作,然后让操作系统/应用程序将其放在堆栈顶部?

如果不是,还有哪些其他可行的方法?

4

2 回答 2

1

我们不想创建一个抽象的 BaseActivity,它包含所有功能的所有可能的属性和抽象方法。

您可以通过删除关键字来完成此操作abstract。每个关键字大约需要 8 次击键。

有没有办法拦截 Activity 的实际实例化,对其执行装饰器模式操作,然后让操作系统/应用程序将其放在堆栈顶部?

只有通过分叉Android。

如果不是,还有哪些其他可行的方法?

创建一个BaseActivity“包含所有可能的属性”的非抽象和非抽象的“所有能力的方法”。根据需要覆盖子类中的方法。在有意义的地方,让子类链接到超类,因此超类可以具有子类可以增强的默认行为。

你可以看到它Activity本身。您不必实现onCreate(), onStart(), onResume(), onPause(), onStop(), onDestroy(), onSaveInstanceState(), onRestoreInstanceState(), 和许多其他方法。这些方法不是抽象的,默认实现是合理的(典型的例外onCreate())。子类可以在需要添加功能的地方覆盖那些方法,或者在某些情况下替换现有的功能(例如,onSaveInstanceState()可以根据需要链接到超类或不链接到超类)。

于 2012-12-12T18:02:05.683 回答
0

我认为这篇文章可以帮助你。 活动装饰师

于 2013-07-14T16:28:51.010 回答